MySQL中数据库表的监控
(1)查看数据库中当前打开了哪些表:show OPEN TABLES ,如图6-1-5所示。另外,还可以通过show OPEN TABLES where In_use > 0过滤出当前已经被锁定的表。
- 查看数据库中表的状态:SHOW STATUS LIKE '%table%',如图6-1-6所示。需要特别注意的是,Table_locks_waited 指的是不能立即获取表级锁而需要等待的次数。如果等待的次数非常大,则说明可能存在锁争抢的情况;如果是频繁的出现锁争抢,则对应用程序的并发性能影响很大。
- 查看数据库中锁的信息:SHOW STATUS LIKE '%lock%',如图6-1-7所示。
(4)查看数据库中的表被扫描的情况:show global status like 'handler_read%',如图6-1-8所示。
查询的结果数据也可以用来评估数据库中索引的使用情况。查询的结果数据说明如下所示。
- Handler_read_first:从索引中读取第一项的次数。如果该值非常高,表明服务器正在执行大量的全索引扫描。该值一般不宜太高。
- Handler_read_key:基于键读取数据行的请求数。该值如果越高,则表明大量的查询都使用了索引;如果越低,表示索引的利用很低。该值一般越高越好。
- Handler_read_last:读取索引中最后一个键的请求数。
- Handler_read_next:按键顺序读取下一行的请求数。如果查询都走了索引,那么该值将不断递增。
- Handler_read_prev:按键顺序读取前一行的请求数(倒序读取数据)。一般用于评估执行ORDER BY … DESC的次数。
- Handler_read_rnd:基于固定位置读取数据行的请求数。如果正在执行大量的、需要对查询结果进行排序的查询,则此值很高。如果该值很高,则可能存在很多查询需要进行整表扫描,或者查询时一些表的关联连接没有正确使用主键或者索引。
- Handler_read_rnd_deleted:从数据库数据文件中读取被删除记录行的请求数。
- Handler_read_rnd_next:从数据库数据文件中读取下一行的请求数。如果SQL语句执行大量表扫描,则此值很高。如果该值很高,一般说明表没有正确添加索引或者SQL语句没有通过索引来查询。
本文节选自《软件性能测试、分析与调优实践之路(第2版)》,获作者和出版社授权发布。