日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

MySQL-数据库监控初探

發布時間:2025/3/21 数据库 17 豆豆
生活随笔 收集整理的這篇文章主要介紹了 MySQL-数据库监控初探 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

  • 生猛干貨
  • 官方文檔
  • 監控指標
  • 數據庫可用性監控
    • 如何確認數據庫是否可以通過網絡連接?
    • 如何確認數據庫是否可讀寫
    • 如何監控數據庫的連接數 max_connections | Threads_connected
  • 數據庫性能
    • 如何計算QPS和TPS
      • QPS
      • TPS
    • 并發數量監控 Threads_running
    • Innodb的阻塞監控
  • 搞定MySQL

生猛干貨

帶你搞定MySQL實戰,輕松對應海量業務處理及高并發需求,從容應對大場面試


官方文檔

https://dev.mysql.com/doc/

如果英文不好的話,可以參考 searchdoc 翻譯的中文版本

http://www.searchdoc.cn/rdbms/mysql/dev.mysql.com/doc/refman/5.7/en/index.com.coder114.cn.html


監控指標

先大體說下幾個點哈

  • 對數據庫服務可用性進行監控

    有一點需要注意的是,不能僅僅監控端口或者進程是否正常,要連接進去,執行一些SQL操作。

  • 對數據庫性能進行監控

    這一塊就比較多了, 比如QPS 和TPS的監控, 并發線程的監控 (不是數據庫的連接數)、 阻塞和死鎖監控 等等

  • 對主從復制的監控

    主從鏈路狀態 、 主從延遲 、 主從數據一致

  • 對服務器資源的監控

    磁盤空間、內存 、SWAP分區、網絡I/O 、CPU等等

接下來,展開探討一下


數據庫可用性監控

如何確認數據庫是否可以通過網絡連接?

MySQL本地的SQL文件能連接,并不意味著可以通過網絡連接,中間有好多東西隔著呢

通常有幾種方式,選一種

  • mysqladmin -umonitor_user -p -h ping

    -u 監控的用戶
  • telnet ip db_port

  • 模擬應用程序使用網絡建立數據庫連接 (推薦)


如何確認數據庫是否可讀寫

  • 檢查數據庫的read_only參數是否為off

    比如從庫這個參數 建議關閉 ,主從切換后,這個參數就要打開,防止新的主不可寫。
  • 建立監控表,并對表中數據進行更新

  • 如果檢測是否可讀的話 ,執行 select @@version


如何監控數據庫的連接數 max_connections | Threads_connected

需要時刻關注DB連接數

  • show variables like ‘max_connections’ , 然后 show global status like ‘Threads_connected’

    max_connections參數用來設置最大連接(用戶)數 , Threads_connected查看當前打開的連接的數量, 可以用這個兩個參數的比值超過閾值進行告警等。

mysql> show variables like 'max_connections'; +-----------------+-------+ | Variable_name | Value | +-----------------+-------+ | max_connections | 151 | +-----------------+-------+ 1 row in set (0.00 sec)mysql> show global status like 'Threads_connected' ; +-------------------+-------+ | Variable_name | Value | +-------------------+-------+ | Threads_connected | 4 | +-------------------+-------+ 1 row in set (0.00 sec)mysql> mysql> show global status like 'Threads_running'; # 當前連接數 +-----------------+-------+ | Variable_name | Value | +-----------------+-------+ | Threads_running | 2 | +-----------------+-------+ 1 row in set (0.04 sec)mysql>

數據庫性能

記錄性能監控中所采集到的數據庫的狀態

下面我們列舉下最常見的監控指標

如何計算QPS和TPS

QPS 并不是僅僅只select 的,而是數據庫處理所有SQL請求的。

QPS

公式 (采集兩次,通過差值獲取)

QPS=(Queries2 - Queries1) / (Uptime_since_flush_status2-Uptime_since_flush_status1)

這些參數都可以通過show status 來獲取 如下

mysql> show global status like 'queries'; # 這個值時累加的; +---------------+-------+ | Variable_name | Value | +---------------+-------+ | Queries | 4820 | +---------------+-------+ 1 row in set (0.05 sec)mysql> show global status like 'uptime_since_flush_status'; +---------------------------+--------+ | Variable_name | Value | +---------------------------+--------+ | Uptime_since_flush_status | 536208 | +---------------------------+--------+ 1 row in set (0.03 sec)mysql>

TPS

公式

TPS = ((com_insert2+com_update2+com_delete2)-(com_insert1+com_update1+com_delete1)/(uptime_since_flush_status2-uptime_since_flush_status1);

同樣的 這些參數都可以通過show status 來獲取 如下

mysql> show global status like 'com_insert'; # 寫入事務的數量,這個值是累加的 +---------------+-------+ | Variable_name | Value | +---------------+-------+ | Com_insert | 1038 | +---------------+-------+ 1 row in set (0.04 sec)mysql> show global status like 'com_update'; # 更新事務的數量,這個值是累加的 +---------------+-------+ | Variable_name | Value | +---------------+-------+ | Com_update | 4 | +---------------+-------+ 1 row in set (0.00 sec)mysql> show global status like 'com_delete'; # 刪除事務的數量,這個值是累加的 +---------------+-------+ | Variable_name | Value | +---------------+-------+ | Com_delete | 1 | +---------------+-------+ 1 row in set (0.00 sec)mysql> show global status like 'uptime_since_flush_status'; +---------------------------+--------+ | Variable_name | Value | +---------------------------+--------+ | Uptime_since_flush_status | 536404 | +---------------------------+--------+ 1 row in set (0.04 sec)mysql>

并發數量監控 Threads_running

數據庫系統的性能會隨著并發處理請求數量的增加而下降;

并發的數量通常會遠小于同一時間連接到數據庫的線程數量。

獲取并發量

mysql> show global status like 'Threads_running'; +-----------------+-------+ | Variable_name | Value | +-----------------+-------+ | Threads_running | 2 | +-----------------+-------+ 1 row in set (0.04 sec)mysql>

Innodb的阻塞監控

阻塞時間> 60秒的 SQL

SELECTb.trx_mysql_thread_id AS '被阻塞線程',b.trx_query AS '被阻塞Sql',c.trx_mysql_thread_id AS '阻塞線程',c.trx_query AS '阻塞Sql',(UNIX_TIMESTAMP() - UNIX_TIMESTAMP(c.trx_started)) AS '阻塞時間' FROMinformation_schema.INNODB_LOCK_WAITS AS a JOIN information_schema.INNODB_TRX AS b ON a.requesting_trx_id = b.trx_id JOIN information_schema.INNODB_TRX AS c ON a.blocking_trx_id = c.trx_id WHERE(UNIX_TIMESTAMP() - UNIX_TIMESTAMP(c.trx_started)) > 60;


搞定MySQL

總結

以上是生活随笔為你收集整理的MySQL-数据库监控初探的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。