参赛得分就有T恤,一下子又有了斗志

不过T恤的logo比较单调,其实可以设计一下

一共有三道题,给你对应的业务脚本,调高tps,只能改配置文件

8U16G机器

不允许调整sync_binlog,innodb_flush_log_at_trx_commit,query_cache_type,tx_isolation,log_bin,innodb_deadlock_detect六个参数值

我只做出了第一题,一开始没注意备份配置文件,不得不换了一台机器,草了

解决办法就是一个参数一个参数的改,最终改到table_open_cache,调高就解决了

15s ] thds: 128 tps: 2845.99 qps: 34151.04 (r/w/o: 28459.07/0.00/5691.97) lat (ms,95%): 173.58 err/s: 0.00 reconn/s: 0.00 [ 20s ] thds: 128 tps: 3035.89 qps: 36434.33 (r/w/o: 30362.54/0.00/6071.79) lat (ms,95%): 155.80 err/s: 0.00 reconn/s: 0.00

innodb_buffer_pool_size=2048M

innodb_log_file_size

对于写很多尤其是大数据量时非常重要。要注意,大的文件提供更高的性能,但数据库恢复时会用更多的时间。我一般用64M-512M,具体取决于服务器的空间。

innodb_log_buffer_size

默认值对于多数中等写操作和事务短的运用都是可以的。如果经常做更新或者使用了很多blob数据,应该增大这个值。但太大了也是浪费内存,因为1秒钟总会 flush(这个词的中文怎么说呢?)一次,所以不需要设到超过1秒的需求。8M-16M一般应该够了。小的运用可以设更小一点。

innodb_write_io_threads

不要让 innodb_log_file_size 太大,这样能够更快,也有更多的磁盘空间 — 经常刷新有利降低发生故障时的恢复时间。 8M

tmp_table_size = 100000000 [ 20s ] thds: 128 tps: 4545.00 qps: 54554.55 (r/w/o: 45464.56/0.00/9089.99) lat (ms,95%): 87.56 err/s: 0.00 reconn/s: 0.00 [ 25s ] thds: 128 tps: 4729.21 qps: 56717.86 (r/w/o: 47259.45/0.00/9458.41) lat (ms,95%): 86.00 err/s: 0.00 reconn/s: 0.00 [ 30s ] thds: 128 tps: 4633.00 qps: 55605.44 (r/w/o: 46339.43/0.00/9266.01) lat (ms,95%): 89.16 err/s: 0.00 reconn/s: 0.00 [ 35s ] thds: 128 tps: 4495.62 qps: 53949.65 (r/w/o: 44958.41/0.00/8991.24) lat (ms,95%): 90.78 err/s: 0.00 reconn/s: 0.00

read_buffer_size=64M read_rnd_buffer_size=32M

table_open_cache = 5120


下面是标准题解

第一题场景是大量随机访问表

innodb_buffer_pool_size = 10G 8U16G机器,调大了好,我的设置不够大 innodb_buffer_pool_instances = 8 innodb_adaptive_hash_index = on 这个是自动建立索引的 table_open_cache = 10240 这个是打开表缓存,随机表,cache多一些 后面那两个table是同一个意思,我的设置不够大 table_open_cache_instances = 64 table_definition_cache = 2048 innodb_spin_wait_delay = 6 innodb_sync_spin_loops = 30

第二题,大量长事务写

这种场景要自动杀事务

这两个是tdsql提供的配置

innodb_hot_update_detect = on cdb_kill_idle_trans_timeout = 1

下面这四个是影响写的

innodb_doublewrite = 0 innodb_io_capacity = 20000 innodb_io_capacity_max = 40000 innodb_flush_method = O_DIRECT

第三题

mysql timestamp比较可能有性能问题,有write skew

用这个 time_zone = ‘+8:00’

thread_handling = ‘pool-of-threads’ thread_pool_size = 6

这个是解决数据倾斜问题

eq_range_index_dive_limit = 200

提高并发

innodb_thread_concurrency = 16


说实话,从题解看不懂啥玩意

mysql还是比较复杂的,没研究innodb,有机会还是要研究一下的

这个比赛主要是测试内部的自动调优程序,这个应该4月份就能上线,有sigmod论文,类似ottertune的自动调优技术

这个东西还是很有价值的。后面有时间再研究研究