二、用命令行的SHOW 语句
直接在命令行下登陆MySQL运行SHOW STATUS查询语句
同样的语句还有SHOW VARIABLES,SHOW STATUS是查看MySQL运行情况,和上面那种通过pma查看到的信息基本类似。
SHOW VARIABLES
SHOW VARIABLES是查看MySQL的配置参数,还可以使用类似SHOW VARIABLES LIKE ‘Key%’
SHOW PROCESSLIST
SHOW PROCESSLIST是查看当前正在进行的进程,对于有锁表等情况的排查很有用处。一般情况下,打开MySQL的慢查询记录同样有利于排查。
SHOW OPEN TABLES
SHOW OPEN TABLES是显示当前已经被打开的表列表。
三、用MySQL自带工具mysqladmin 查看
使用MySQL自带的mysqladmin 工具查看status,使用以下命令
mysqladmin -uroot -p密码 status
显示的结果如下:
Uptime: 502963 Threads: 2 Questions: 8561820 Slow queries: 734681 Opens: 553
45 Flush tables: 1 Open tables: 85 Queries per second avg: 17.023
另外可以添加 -i 5 参数,让其每五秒自动刷新之。
mysqladmin -uroot -p密码 status -i 5
mysqladmin extended-status
同样的可以使用mysqladmin -uroot -p密码 extended-status来查看更多的MySQL运行信息,这种方式和第一种查看的信息基本一样。
运行中的mysql状态查看(1)QPS(每秒Query量)
QPS
=
Questions(or
Queries)
/
seconds
mysql
>
show
global
status
like
'Question%'
(2)TPS(每秒事务量)
TPS
=
(Com_commit
+
Com_rollback)
/
seconds
mysql
>
show
global
status
like
'Com_commit'
mysql
>
show
global
status
like
'Com_rollback'
(3)key
Buffer
mysql>show
global
status
like
'key%'
key_buffer_read_hits
=
(1-key_reads
/
key_read_requests)
*
100%
key_buffer_write_hits
=
(1-key_writes
/
key_write_requests)
*
100%
(4)InnoDB
Buffer命中率
mysql>
show
status
like
'innodb_buffer_pool_read%'
innodb_buffer_read_hits
=
(1
-
innodb_buffer_pool_reads
/
innodb_buffer_pool_read_requests)
*
100%
(5)Query
Cache命中率
mysql>
show
status
like
'Qcache%'
Query_cache_hits
=
(Qcahce_hits
/
(Qcache_hits
+
Qcache_inserts
))
*
100%
(6)Table
Cache状态量
mysql>
show
global
status
like
'open%'
比较
open_tables
与
opend_tables
值
(7)Thread
Cache
命中率
mysql>
show
global
status
like
'Thread%'
mysql>
show
global
status
like
'Connections'
Thread_cache_hits
=
(1
-
Threads_created
/
connections
)
*
100%
(8)锁定状态
mysql>
show
global
status
like
'%lock%'
Table_locks_waited/Table_locks_immediate=0.3%
如果这个比值比较大的话,说明表锁造成的阻塞比较严重
Innodb_row_lock_waits
innodb行锁,太大可能是间隙锁造成的
(9)复制延时量
mysql
>
show
slave
status
查看延时时间
(10)
Tmp
Table
状况(临时表状况)
mysql
>
show
status
like
'Create_tmp%'
Created_tmp_disk_tables/Created_tmp_tables比值最好不要超过10%,如果Created_tmp_tables值比较大,
可能是排序句子过多或者是连接句子不够优化。
有时候我们会不小心对一个大表进行了 update,比如说写错了 where 条件......
此时,如果 kill 掉 update 线程,那回滚 undo log 需要不少时间。如果放置不管,也不知道 update 会持续多久。
那我们能知道 update 的进度么?
实验
我们先创建一个测试数据库:
快速创建一些数据:
连续执行同样的 SQL 数次,就可以快速构造千万级别的数据:
查看一下总的行数:
我们来释放一个大的 update:
然后另起一个 session,观察 performance_schema 中的信息:
可以看到,performance_schema 会列出当前 SQL 从引擎获取的行数。
等 SQL 结束后,我们看一下 update 从引擎总共获取了多少行:
可以看到该 update 从引擎总共获取的行数是表大小的两倍,那我们可以估算:update 的进度 = (rows_examined) / (2 * 表行数)
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)