十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
用 pt-table-checksum 时,会不会影响业务性能?
10年积累的成都网站建设、做网站经验,可以快速应对客户对网站的新想法和需求。提供各种问题对应的解决方案。让选择我们的客户得到更好、更有力的网络服务。我虽然不认识你,你也不认识我。但先网站设计后付款的网站建设流程,更有裕华免费网站建设让你可以放心的选择与我们合作。
实验
实验开始前,给大家分享一个小经验:任何性能评估,不要相信别人的评测结果,要在自己的环境上测试,并(大概)知晓原理。
我们先建一对主从:
然后用 mysqlslap跑一个持续的压力:
开另外一个会话,将 master 上的 general log 打开:
然后通过 pt-table-checksum 进行一次比较:
查看 master 的 general log,由于 mysqlslap 的影响,general log 中有很多内容,我们找到与 pt-table-checksum 相关的线程:
将该线程的操作单独列出来:
操作比较多,我们一点一点来说明:
这里工具调小了 innodb 锁等待时间。使得之后的操作,只要在 innodb 上稍微有锁等待,就会马上放弃操作,对业务影响很小。
另外工具调小了 wait_timeout 时间,倒是没有特别的作用。
工具将隔离级别调整为了 RR 级别,事务的维护代价会比 RC 要高,不过后面我们会看到工具使用的每个事务都很小,加上之前提到 innodb 锁等待时间调到很小,对线上业务产生的成本比较小。
RR 级别是数据对比的基本要求。
工具通过一系列操作,了解表的概况。工具是一个数据块一个数据块进行校验,这里获取了第一个数据块的下边界。
接下来工具获取了下一个数据块的下边界,每个 SQL前都会 EXPLAIN 一下,看一下执行成本,非常小心翼翼。
之后工具获取了一个数据块的 checksum,这个数据块不大,如果跟业务流量有冲突,会马上出发 innodb 的锁超时,立刻退让。
以上是 pt-table-checksum 的一些设计,可以看到这几处都是精心维护了业务流量不受影响。
工具还设计了其他的一些机制保障业务流量,比如参数 --max-load 和 --pause-file 等,还有精心设计的数据块划分方法,索引选择方法等。大家根据自己的情况配合使用即可达到很好的效果。
总结
本期我们介绍了简单分析 pt-table-checksum 是否会影响业务流量,坊间会流传工具的各种参数建议或者不建议使用,算命的情况比较多,大家都可以用简单的实验来分析其中机制。
还是那个观点,性能测试不能相信道听途说,得通过实验去分析。
一,获取mysql用户下的进程总数
ps -ef | awk '{print $1}' | grep "mysql" | grep -v "grep" | wc-1
二,主机性能状态
# uptime
[root@ ~]# uptime
13:05:52 up 53 days, 52 min, 1 user, load average: 0.00, 0.00, 0.00
三,CPU使用率
# top
或
# vmstat
四,磁盘IO量
# vmstat 或 # iostat
五,swap进出量[内存]
# free
六,数据库性能状态
(1)QPS(每秒Query量)
QPS = Questions(or Queries) / seconds
mysql show /*50000 global */ status like 'Question';
(2)TPS(每秒事务量)
TPS = (Com_commit + Com_rollback) / seconds
mysql show status like 'Com_commit';
mysql show status like 'Com_rollback';
(3)key Buffer 命中率
key_buffer_read_hits = (1-key_reads / key_read_requests) * 100%
key_buffer_write_hits = (1-key_writes / key_write_requests) * 100%
mysql show status like 'Key%';
(4)InnoDB Buffer命中率
innodb_buffer_read_hits = (1 - innodb_buffer_pool_reads / innodb_buffer_pool_read_requests) * 100%
mysql show status like 'innodb_buffer_pool_read%';
(5)Query Cache命中率
Query_cache_hits = (Qcahce_hits / (Qcache_hits + Qcache_inserts )) * 100%;
mysql show status like 'Qcache%';
(6)Table Cache状态量
mysql show status like 'open%';
(7)Thread Cache 命中率
Thread_cache_hits = (1 - Threads_created / connections ) * 100%
mysql show status like 'Thread%';
mysql show status like 'Connections';
(8)锁定状态
mysql show status like '%lock%';
(9)复制延时量
mysql show slave status
(10) Tmp Table 状况(临时表状况)
mysql show status like 'Create_tmp%';
(11) Binlog Cache 使用状况
mysql show status like 'Binlog_cache%';
(12) Innodb_log_waits 量
mysql show status like 'innodb_log_waits';
当然你也可以使用一下开源监控软件进行监控
一,RRDTool
二,Nagios
三,MRTG
四,Cacti
带界面的工具
1、MySQL可视化工具
这些工具都可以免费使用:
a、MySQL查询浏览器(MySQL Query Browser):这个不用说了…
b、MySQL管理员(MySQL Administrator):功能集中在服务器管理上,所以它最适合DBA使用,而不是开发人员和分析人员。它可以帮助DBA把创建备份 、创建用户并分配权限、显示服务器日志和状态信息等过程进行自动化处理。它还包括了一些基本的监控功能,例如图形化的状态变量显示,但是它没有下文里会提到的交互式监控工具那么灵活。
c、MySQL迁移工具箱(MySQL Migration Tookit):可以帮你把数据从别的数据库系统迁移到MySQL里。
d、MySQL工作台(MySQL Workbench):MySQL的建模工具。
2、SQLyog
SQLyog是最常用的MySQL可视化工具,只能用于win下。
3、phpMyAdmin
phpMyAdmin是一款很流行的管理工具,它基于Web界面来管理MySQL服务器。有很多支持者,但反对者也不少。
监控工具
MySQL监控是一个很大复杂的任务,不同的应用有着不同的需求。“监控”是大家滥用的术语之一,承载了几重意思。我们讲到的监控工具被分为非互动的和互动的两类。非互动监控常常就是一个自动化系统,它接收系统的测量值,如果有超出安全范围的,就通过发出警告提醒管理员。互动监控工具可以让你实时地观测服务器。
你可能对监控工具在其他方面的差别也很感兴趣,例如被动监控和主动监控,后者会发送报警信息并作出初步反应(就像Nagios一样);或者你可能正在寻找这样一工具:它可以创建一个信息仓库,而不仅仅是显示当前的统计信息。有许多监控系统不是专为监控MySQL而设计的,它们就是一个通用系统,里面设计了一个周期性的任务,定时去检查各类资源的状态,例如像服务器、路由器、以及各种软件(包括MySQL)。它们常常会提供一个插件架构,同时有一个预订的MySQL插件可供使用。这样的一些系统能够记录监控对象的状态,并通过web界面用图形化的形式表示出来。当监控对象出现问题,或者状态值超过安全范围时,它们还能发送报警信息,或者执行一个初始化的动作。
a、非交互性工具
1、Nagios
监控界流行一句话:只要用顺了Nagios,你就永远不会再想到其它监控系统。
对于Nagios本blog会持续推出相关文章,现在只是引用Nagios官方的介绍:
Nagios是一款用于系统和网络监控的应用程序。它可以在你设定的条件下对主机和服务进行监控,在状态变差和变好的时候给出告警信息。
Nagios最初被设计为在Linux系统之上运行,然而它同样可以在类Unix的系统之上运行。
Nagios更进一步的特征包括:监控网络服务(SMTP、POP3、HTTP、NNTP、PING等);
监控主机资源(处理器负荷、磁盘利用率等);
简单地插件设计使得用户可以方便地扩展自己服务的检测方法;
general_log=[on|off] #是否启用通用查询日志
general_log_file[=filename] #通用查询日志位置及名字
这2个参数可以开启mysql通用日志,里面记录了你执行过的语句
应该对你有用。但是开启后,日志增长会非常快