mysql读写相互影响的测试


读写相互影响的测试读写相互影响的测试读写相互影响的测试读写相互影响的测试 简单的简单的简单的简单的 SELECT vs 更新更新更新更新 option user test/test@10.128.129.216:3306:test time 10m log /dev/null groups 2 declare id1 int 1 100000 id2 int 1 100000 begin group 1 select * from t_item where col1=:id1; group -1 update t_item set col2=col2-1 where col1=:id2; end 256 个并发做 Select ,256 个并发做 Update 。 禁用禁用禁用禁用 TCC:::: set global tcc_max_autocommit_concurrency=0; set global tcc_max_big_query_concurrency=0; set global tcc_max_query_concurrency=0; set global tcc_max_transaction_concurrency=0; set global innodb_thread_concurrency=16; set global innodb_flush_log_at_trx_commit=1; 可以看出 TPS & QPS 的抖动范围较大,并且 QPS 有可能跌去绝大部份。 启用启用启用启用 TCC+LGWR :::: set global tcc_max_autocommit_concurrency=10; set global tcc_max_big_query_concurrency=6; set global tcc_max_query_concurrency=10; set global tcc_max_transaction_concurrency=40; set global innodb_thread_concurrency=0; set global innodb_flush_log_at_trx_commit=3; QPS 受控后稍下降了一点点,但 TPS 得到较大的提升,秒级抖动依然很历害,但很快就恢复,抖动幅度有较好的改 善。 启用启用启用启用 TCC for Select :::: set global tcc_max_autocommit_concurrency=0; set global tcc_max_big_query_concurrency=6; set global tcc_max_query_concurrency=8; set global tcc_max_transaction_concurrency=0; set global innodb_thread_concurrency=16; set global innodb_flush_log_at_trx_commit=1; 对于简单的 SQL 场景,处理能力上 TCC 补丁能提升一些写能力,并且能防止读写一方跌到 0 的情况,总体处理能力 上差不多。 复杂复杂复杂复杂的的的的 SELECT vs 更新更新更新更新 option user test/test@10.128.129.216:3306:test time 10m log /dev/null groups 2 declare id1 int 1 100000 id2 int 1 100000 begin group 1 select sess, avg(sys), avg(usr), avg(sys+wio+usr) cpu, avg(upd), avg(sel), avg(upd+sel) exec from mysql_load_statistics where sess > 20 and day > date_sub(now(), interval 1 hour) group by sess having count(*) > 50; group -1 update t_item set col2=col2-1 where col1=:id2; end 256 个并发做 Select ,256 个并发做 Update 。这里的复杂 SQL,扫描了 3600 条记录,并进行汇总处理,在 Day 上面 有索引可以使用。 禁用禁用禁用禁用 TCC:::: set global tcc_max_autocommit_concurrency=0; set global tcc_max_big_query_concurrency=0; set global tcc_max_query_concurrency=0; set global tcc_max_transaction_concurrency=0; set global innodb_thread_concurrency=16; set global innodb_flush_log_at_trx_commit=1; 由于复杂的 SQL 很耗 CPU,可以看到基本上 Update 无法被正常处理,如果 Slave 上有复杂的 SQL 查询,那么一定会 影响恢复的速度。 启用启用启用启用 TCC+LGWR :::: set global tcc_max_autocommit_concurrency=10; set global tcc_max_big_query_concurrency=10; set global tcc_max_query_concurrency=10; set global tcc_max_transaction_concurrency=40; set global innodb_thread_concurrency=0; set global innodb_flush_log_at_trx_commit=3; 启用 TCC 后,复杂查询的 QPS 被限到上图的一半,大约在 450 的样子,不过 Update 的能力就大大提升了。 启用启用启用启用 TCC for Select :::: set global tcc_max_autocommit_concurrency=0; set global tcc_max_big_query_concurrency=10; set global tcc_max_query_concurrency=10; set global tcc_max_transaction_concurrency=0; set global innodb_thread_concurrency=16; set global innodb_flush_log_at_trx_commit=1; 启用查询 TCC 后,复杂查询的 QPS 被限到上图的一半不到一点,大约在 400 的样子,不过 Update 的能力就大大提 升了。 简单查询简单查询简单查询简单查询 SELECT vs 事务事务事务事务 option user test/test@10.128.129.216:3306:test time 10m log /dev/null groups 2 declare id1 int 1 100000 id2 int 1 90000 id3 int 90000 100000 begin group 1 select * from t_item where col1 = :id1; group -1 start; group -1 update t_item set col2=col2-1 where col1=:id2; group -1 update t_item set col2=col2+1 where col1=:id3; group -1 commit; end 256 个并发做 Select ,256 个并发做 Update 。 禁用禁用禁用禁用 TCC:::: set global tcc_max_autocommit_concurrency=0; set global tcc_max_big_query_concurrency=0; set global tcc_max_query_concurrency=0; set global tcc_max_transaction_concurrency=0; set global innodb_thread_concurrency=16; set global innodb_flush_log_at_trx_commit=1; 中间出现了数次 TPS 下跌的情况。 启用启用启用启用 TCC+LGWR :::: set global tcc_max_autocommit_concurrency=10; set global tcc_max_big_query_concurrency=10; set global tcc_max_query_concurrency=10; set global tcc_max_transaction_concurrency=40; set global innodb_thread_concurrency=0; set global innodb_flush_log_at_trx_commit=3; 虽然也有抖动,但总得来讲抖动能在 1 秒钟内恢复,并且幅度要小很多。 启用启用启用启用 TCC for Select :::: set global tcc_max_autocommit_concurrency=0; set global tcc_max_big_query_concurrency=10; set global tcc_max_query_concurrency=10; set global tcc_max_transaction_concurrency=0; set global innodb_thread_concurrency=16; set global innodb_flush_log_at_trx_commit=1; 由于没有控制事务的并发,中间出现了数次 QPS 跌到 0 的情况,详细原因还需要研究。
还剩5页未读

继续阅读

下载pdf到电脑,查找使用更方便

pdf的实际排版效果,会与网站的显示效果略有不同!!

需要 6 金币 [ 分享pdf获得金币 ] 0 人已下载

下载pdf

pdf贡献者

dfwm

贡献于2014-10-20

下载需要 6 金币 [金币充值 ]
亲,您也可以通过 分享原创pdf 来获得金币奖励!
下载pdf