实在抱歉,上期的 谁说Postgresql 没有靠谱的高可用为(4)期,疏忽忘记打标识了,特此道歉
___________________________________________________________________
接上期,上期讲到内存的问题
关于内存的问题在MYSQL 并不是一件容易讲清楚的问题,而关注于内存的问题也是蛮多的。
8 问:MYSQL innodb_buffer_pool_size 我到底用了多少内存 ?
关于innodb_buffer_pool_size,上期说了计算利用率的计算方法,而到底使用了多少内存是否能给一个明确的数字。
(innodb_buffer_pool_pages_total - innodb_buffer_pool_pages_free) * 16/1024
就是你正在使用的innodb_buffer_pool_size 的尺寸。
同时如果你不确认你的MYSQL 的PAGE SIZE ,可以查阅一下
说完内存下面该是关注I/O的问题了,和相关问题
9 问:我们的MYSQL服务器上有多个库,现在需要拆库或者迁库吗?
问这个问题的时候,一般情况是当初服务器的性能强悍,所以不同的库都往这一个服务器上放,而后期就是服务器的性能已经不能满足现在越来越多的库的压榨。(实际上MYSQL 适合库少表少的情况,模块化,而不是和其他数据库一样集中,什么都往里面放)
所以到了这个时期,要回答的第一个问题就是,这个服务器上众多的库,到底哪个最HOT
SELECT schema_name , SUM(count_star) count , ROUND( (SUM(sum_timer_wait) / SUM(count_star)) / 1000000) AS avg_microsec FROM performance_schema.events_statements_summary_by_digest WHERE schema_name IS NOT NULL GROUP BY schema_name;
但这样的展示其实也是有缺陷的,不知道大家知道不知道,这里就不再啰嗦了。所以只能计算一个大概的量
(The average query time is wrong, because when you open the library but query the tables in other databases, the counters that open the database are also counted,)
同时我们还可以计算出当前这些库查询中出错的情况
SELECT schema_name
, SUM(sum_errors) err_count
FROM performance_schema.events_statements_summary_by_digest
WHERE schema_name IS NOT NULL
GROUP BY schema_name;
10 问:那我想知道某个库中那些总体语句的延迟比较高,执行次数与错误的次数的对比
其实在MYSQL 5.7 后sys 库的使用越来越多,也导致 slow log 的使用越来越少(这也是商业数据库通用的方法,ORACLE SQL SERVER),PG 是将慢查询打印到日志 类似MYSQL SLOW LOG
所以在MYSQL 越来越往SYS 库去获取性能的数据的情况,下面就是一个例子 使用 sys.statements_with_runtimes_in_95th_percentile
sys.statements_with_errors_or_warnings
11 问MYSQL系统日志的写请求是否有瓶颈
这需要关注 innodb_log_waits 这个状态值,如果一直为0则说明日志的写入并未有因日志的缓存太小而造成写等待,如果不为0 则可以和 innodb_log_write_requestes 这个值进行一个百分比的计算,看有日志的等待比有多大。
当然这还没完,Innodb_os_log_pending_fsyncs的数值是否为0 ,证明物理刷入磁盘的日志是否有延迟,与Innodb_os_log_fsyncs 匹配,也可以看到未及时刷入的日志的比率有多少。
以上两个方面可以部分反映MYSQL的日志写这个过程是否有一些性能方面的瓶颈。
12 问 我的innodb_log_file_size 设置的合理吗,有没有阻塞日志写入造成性能问题?
MYSQL 系统如果是大量写入的系统,是需要关注 innodb_log_file_size的,怎么来通过监控来查看设置的innodb_log_file_size 是否合适
innodb_log_files_in_group * innodb_log_file_size / Innodb_os_log_written
定时刷新可以看出平均刷新时间段的日志的写入量,在对比你设置的量看看有没有平均,另外调整相关参数要注意,需要有特殊的操作(具体请百度)。
待...... (3)