查看mysql运行状态的命令是什么?

查看mysql运行状态的命令是什么?,第1张

一、用phpMyAdmin进行查看

二、用命令行的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 * 表行数)

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/8729608.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-20
下一篇 2023-04-20

发表评论

登录后才能评论

评论列表(0条)

保存