Microsoft SQL Server 2005 数据库优化和排错课程笔记

这两天参加了SQL数据库优化和排错的培训,做个笔记。

一、SQL服务器性能监测方案
1. 使用SQL Server Profiler 和 System Monitor
2. 审计和比较测试结果

二、数据库和服务器性能故障的排错
1. SQLDiag 工具的使用

三、查询优化
1. 使用数据库 Engine Tuning Advisor

四、SQL 服务器连接故障的排错
1. Surface area configuration
2. SQL Server 2005 Endpoints

五、SQL 服务器数据故障的排错
1. 数据完整性
2. 通过Single-Page Restore 解决Torn Page的问题
Page_Verify 选项: 查找损坏的页面、TORN_PAGE_DETECTION 和 CHECKSUM

六、SQL 服务器并发故障的排错
1. SQL Server Latches
2. sp_blocker_pss80
3. Latch Wait Types
4. sys.dm_exec_sessions、sys.dm_exec_requests

MySQL 数据库双向复制、循环复制(镜像)

MySQL数据库复制、镜像、实时备份的文章中,主数据库A 的数据镜像到从数据库B,是单向的,网站的数据读写都必须在数据库A进行,结果会自动镜像到数据库B中。但是对数据库B的直接操作,不会影响数据库A。

对于双向数据库镜像,就是数据库A的数据变化要镜像到数据库B中,同时数据库B里的修改也要同时复制到数据库A里。
对于循环数据库镜像,就是多个数据库A、B、C、D等,对其中任一个数据库的修改,都要同时镜像到其它的数据库里。

应用:同一个网站的数据库和程序,可以放置在不同的主机上,在任一台主机上新增的订单、客户资料,都会同时加入其它的主机数据库里。

要实现双向或循环数据库镜像,首先要解决的就是防止数据库中自动递增(AUTO_INCREMENT)字段的冲突,以免多数据库各自生成一样的增量值。

下面以三台主机循环镜像为例,A是B的主镜像,B是C的主镜像,C是A的主镜像。三台主机上MySQL设置文件 /etc /my.cnf 中分别加入下面的参数:

#
主机一:美国主机 A, IP: 100.101.102.201
[mysqld]
server-id                      = 10
log-bin                         = mysql-bin
log-slave-updates
replicate-same-server-id       = 0
auto_increment_increment        = 10
auto_increment_offset          = 1
master-host                     = 100.101.102.203
master-user                    = repl_user
master-password                 = repl_password
report-host                     = 100.101.102.201

#
主机二:中国主机 B, IP: 100.101.102.202
[mysqld]
server-id                      = 20
log-bin                         = mysql-bin
log-slave-updates
replicate-same-server-id       = 0
auto_increment_increment        = 10
auto_increment_offset          = 2
master-host                     = 100.101.102.201
master-user                    = repl_user
master-password                 = repl_password
report-host                     = 100.101.102.202

#
主机三:本地主机 C, IP: 100.101.102.203
[mysqld]
server-id                      = 30
log-bin                         = mysql-bin
log-slave-updates
replicate-same-server-id       = 0
auto_increment_increment        = 10
auto_increment_offset          = 3
master-host                     = 100.101.102.202
master-user                    = repl_user
master-password                 = repl_password
report-host                     = 100.101.102.203

简单说明:
server-id:数据库标识,每个数据库标识必须唯一;
replicate-same-server-id:设置为0,防止数据循环更新;
auto_increment_increment:这是循环镜像里最重要的参数之一,表示自动增量为10,这将允许最多10台数据库加入这个循环镜像的阵列,而自动递增字段不会重复。
auto_increment_offset:这是循环镜像里最重要的参数之一,表示偏移值,每个数据库的偏移值必须唯一,且在1和auto_increment_increment之间。
master-host:主数据库服务器的IP;
master-user:用于连接主数据库的镜像用户名;
master-password:用于连接主数据库的镜像密码;
report-host:提供给主数据库用于反向连接的IP,因为主数据库有时无法正确判断从服务器的IP,所以这里最好填上从服务器自己的IP地址。

另外,有时只需要镜像某些数据库,可以在 my.cnf 中加入:
replicate-do-db = db_name1
replicate-do-db = db_name2
replicate-do-db = db_name3

这样就仅仅镜像 db_name1/db_name2/db_name3

如果只是某些数据库不要镜像,可以在 my.cnf 中加入:
replicate-ignore-db=db_name1
replicate-ignore-db=db_name2
replicate-ignore-db=db_name3

这样镜像时就忽略 db_name1/db_name2/db_name3 这三个数据库。

VoIP 电话、Linksys PAP2、vbuzzer

今天买了个linksys的PAP2,装了网络电话,效果很好。

网关采用解锁的PAP2,用于将普通电话连到网络上,通话质量感觉比普通电话线路还要好。如果你想省钱,直接用电脑打电话当然也可以,但是效果差多了,而且整天打电话时电脑要开着,不方便。

网络电话服务商用的是:Vbuzzer
这家公司的长途价格很不错,而且以$2/月的价格提供北美当地电话号码,应该是最便宜的了。就是说,你也可以拥有国外的本地电话,那么国外客户联系你就不用打国际长途了。