Mysql性能監控常用mysql 命令

  1. 查詢緩存情況 SHOW VARIABLES LIKE '%cache%';

  2. 查詢慢查詢情況
    SHOW VARIABLES LIKE '%slow%';
    SHOW GLOBAL STATUS LIKE '%slow%';

  3. 查看最大鏈接數
    SHOW VARIABLES LIKE 'max_connections';

  4. 查看最大鏈接過的用戶數
    SHOW GLOBAL STATUS LIKE 'max_used_connections';

  5. 顯示用戶正在運行的線程
    SHOW PROCESSLIST;

    SELECT * FROM information_schema.processlist;
    參考:https://zhuanlan.zhihu.com/p/30743094

如果出現有表鎖定,無法查詢的情況,可以使用 該命令來查詢出任務的線程的id,然後kill id,即可結束線程(注意不要隨便在運行的服務上,做alter table操作,包含更改表備註,不然可能會導致表鎖定,深刻體會)。參考:https://www.cnblogs.com/digdeep/p/4892953.html

  1. 查詢出innodb的引擎的情況 SHOW ENGINE INNODB STATUS
    參考:https://blog.csdn.net/rudygao/article/details/47151033

  2. 在線alter表的注意事項及注意的坑。
    7.1 查詢事務:

    5.5 版本

SELECT
*
/**
    a.trx_id,
    a.trx_state,
    a.trx_started,
    a.trx_query,
    b.ID,
    b. USER,
    b. HOST,
    b.DB,
    b.COMMAND,
    b.TIME,
    b.STATE,
    b.INFO
    
**/
FROM
    information_schema.INNODB_TRX a
LEFT JOIN information_schema.PROCESSLIST b ON a.trx_mysql_thread_id = b.id
WHERE
    b.COMMAND = 'Sleep';
    

5.6版本(支持在線ddl)

SELECT
     a.trx_id,
     a.trx_state,
     a.trx_started,
     a.trx_query,
     b.ID,
     b.USER,
     b.DB,
     b.COMMAND,
     b.TIME,
     b.STATE,
     b.INFO,
     c.PROCESSLIST_USER,
     c.PROCESSLIST_HOST,
     c.PROCESSLIST_DB,
     d.SQL_TEXT
FROM
     information_schema.INNODB_TRX a
LEFT JOIN information_schema.PROCESSLIST b ON a.trx_mysql_thread_id = b.id
AND b.COMMAND = 'Sleep'
LEFT JOIN PERFORMANCE_SCHEMA.threads c ON b.id = c.PROCESSLIST_ID
LEFT JOIN PERFORMANCE_SCHEMA.events_statements_current d ON d.THREAD_ID = c.THREAD_ID;
  1. 查詢某個表的索引情況,一般查詢太慢都是沒有命中聯合索引.
SELECT a.TABLE_SCHEMA,
a.TABLE_NAME,
a.index_name,
GROUP_CONCAT(column_name ORDER BY seq_in_index) AS `Columns`
FROM information_schema.statistics a
GROUP BY a.TABLE_SCHEMA,a.TABLE_NAME,a.index_name
having a.TABLE_NAME='dm_yy_kxd_nationnalver_ztsj_xg_day'
  1. Mysql備份數據庫:mysqldump -h 127.0.0.1 -P 3306 -u root -ppsd --databases samego > /home/alic/MySQL/samego.sql

    其中,127.0.0.1爲數據庫地址,3306爲數據庫端口,root爲數據庫賬號,psd 爲數據庫賬號密碼,samego爲數據庫的名稱,/home/alic/MySQL/samego.sql 爲備份的數據庫的文件的地址.

    參考:https://cloud.tencent.com/developer/article/1072214

  2. 如果查詢某個表,看起來數量很少,但是實際查詢很慢,可能是因爲有些數據還沒實際刪除。一般我們執行 delete 操作並不會實際刪除表在磁盤上的數據,實際刪除表在磁盤上的數據需要執行以下兩個命令,optimize table talter table t engine=InnoDB 參考:https://zhuanlan.zhihu.com/p/66336976

  3. 查詢數據庫或表的容量
    查詢數據庫的容量

    select 
    table_schema as '數據庫',
    table_name as '表名',
    table_rows as '記錄數',
    truncate(data_length/1024/1024, 2) as '數據容量(MB)',
    truncate(index_length/1024/1024, 2) as '索引容量(MB)'
    from information_schema.tables
    order by data_length desc, index_length desc;
    

    查詢表的容量

    select 
    table_schema as '數據庫',
    table_name as '表名',
    table_rows as '記錄數',
    truncate(data_length/1024/1024, 2) as '數據容量(MB)',
    truncate(index_length/1024/1024, 2) as '索引容量(MB)'
    from information_schema.tables
    order by data_length desc, index_length desc;
    

    參考:MySQL查看數據庫表容量大小

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章