解決方案:深色大氣的科技公司網(wǎng)站源碼,自適應布局設計,帶完整演示數據
優(yōu)采云 發(fā)布時(shí)間: 2022-12-10 02:46解決方案:深色大氣的科技公司網(wǎng)站源碼,自適應布局設計,帶完整演示數據
短信 | 管理用戶(hù)頭像管理
解決方法:這些 MySQL 最樸素的監控方式!用完愛(ài)不釋手!
目前數據庫的監控方式有很多,分為內置數據庫、商業(yè)、開(kāi)源三大類(lèi),各有特點(diǎn);而對于mysql數據庫,由于社區活躍度高,所以監控方式也很多,不管是哪種監控方式,核心都是監控數據。獲取綜合監控數據后,就是柔性展示部分。
那么今天我們就來(lái)介紹一下使用mysql自帶的方法采集來(lái)獲取監控數據,在單系統下是最快、最方便、損耗最小的。
這次文章充分利用mysql自帶的show命令實(shí)現獲取,從connects、buffercache、lock、SQL、statement、Database throughputs、serverconfig7獲取監控數據。
連接數(Connects)
最大使用連接數:
show?status?like?‘Max_used_connections’
當前打開(kāi)的連接數:
show?status?like?‘Threads_connected’
緩存(bufferCache)
未從緩沖池中讀取的次數:
show?status?like?‘Innodb_buffer_pool_reads’
從緩沖池中讀取的次數:
show?status?like?‘Innodb_buffer_pool_read_requests’
緩沖池中的總頁(yè)數:
show?status?like?‘Innodb_buffer_pool_pages_total’
緩沖池中空閑的頁(yè)數:
show?status?like?‘Innodb_buffer_pool_pages_free’
緩存命中率計算:
?。?-Innodb_buffer_pool_reads/Innodb_buffer_pool_read_requests)*100%
緩存池使用情況為:
((Innodb_buffer_pool_pages_total-Innodb_buffer_pool_pages_free)/Innodb_buffer_pool_pages_total)*100%
鎖
等待的鎖數:
show?status?like?‘Innodb_row_lock_waits’
每個(gè)鎖的平均等待時(shí)間:
show?status?like?‘Innodb_row_lock_time_avg’
檢查表鎖:
show?open?TABLES?where?in_use>0;
如果有數據,說(shuō)明有鎖表,如果為空,說(shuō)明沒(méi)有表鎖
備注:鎖等待統計的統計次數為累計數據,每次獲取可以減去之前的數據,得到當前的統計數據
數據庫
檢查mysql開(kāi)關(guān)是否打開(kāi):
show variables like ‘slow_query_log’;
ON為開(kāi)啟,為OFF則設置global slow_query_log=1開(kāi)啟
查看mysql閾值:
show variables like ‘long_query_time’;
根據頁(yè)面傳輸閾值參數,修改閾值設置global long_query_time=0.1
查看mysql慢sql目錄:
show variables like ‘slow_query_log_file’;
格式化慢sql日志:
mysqldumpslow?-s?at?-t?10?/export/data/mysql/log/slow.log
注意:該語(yǔ)句不能通過(guò)jdbc執行,屬于命令行執行。
意思是:顯示最長(cháng)的10條SQL語(yǔ)句的執行信息,10可以修改為T(mén)OP的個(gè)數。顯示的信息有:執行次數、平均執行時(shí)間、SQL語(yǔ)句
備注:當mysqldumpslow命令執行失敗時(shí),慢日志會(huì )同步到本地進(jìn)行格式化。
陳述
插入數量:顯示狀態(tài)如 'Com_insert'
刪除數量:顯示狀態(tài)如“Com_delete”
更新數量:顯示狀態(tài)如 'Com_update'
選擇數量:顯示狀態(tài)如 'Com_select'
吞吐量(數據庫吞吐量)
發(fā)送吞吐量:顯示狀態(tài),如“Bytes_sent”
接收吞吐量:顯示狀態(tài),如“Bytes_received”
總吞吐量:Bytes_sent+Bytes_received
數據庫參數(serverconfig)
顯示變量
慢SQL
慢SQL是指MySQL慢查詢(xún),特別是運行時(shí)間超過(guò)long_query_time值的SQL。
我們經(jīng)常聽(tīng)說(shuō)MySQL有二進(jìn)制日志binlog、中繼日志relaylog、重做回滾日志redolog、undolog等。對于慢查詢(xún),還有慢查詢(xún)日志slowlog,用于記錄MySQL中響應時(shí)間超過(guò)閾值的語(yǔ)句.
慢SQL對實(shí)際生產(chǎn)業(yè)務(wù)的影響是致命的,因此測試人員在性能測試時(shí)監控數據庫SQL語(yǔ)句的執行情況,為開(kāi)發(fā)提供準確的性能優(yōu)化建議就顯得尤為重要。那么如何利用Mysql數據庫提供的慢查詢(xún)日志來(lái)監控SQL語(yǔ)句的執行情況,找出高消耗的SQL語(yǔ)句。下面詳細介紹慢查詢(xún)日志的使用步驟:
這個(gè)long_query_time用來(lái)定義慢于多少秒時(shí)的“慢查詢(xún)”。注意單位是秒。我通過(guò)執行sql命令set long_query_time=1將long_query_time的值設置為1,也就是執行時(shí)間超過(guò)了1秒。計算慢查詢(xún),如下:
使用慢sql分析工具mysqldumpslow對慢SQL日志進(jìn)行格式化分析 mysqldumpslow慢查詢(xún)分析工具,mysql安裝后自帶??梢酝ㄟ^(guò)./mysqldumpslow --help查看參數說(shuō)明
常見(jiàn)用法:
取出 10 個(gè)最常用的慢查詢(xún)
./mysqldumpslow?-s?c?-t?10?/export/data/mysql/log/slow.log
取出查詢(xún)時(shí)間最慢的3個(gè)慢查詢(xún)
./mysqldumpslow?-s?t?-t?3?/export/data/mysql/log/slow.log
注意:使用mysqldumpslow的分析結果不會(huì )顯示具體完整的sql語(yǔ)句,只會(huì )顯示sql的組成結構;
假如:?SELECT?FROM?sms_send?WHERE?service_id=10?GROUP?BY?content?LIMIT?0,?1000;
<p>
mysqldumpslow 命令執行后顯示:
Count:?2?Time=1.5s?(3s)?Lock=0.00s?(0s)?Rows=1000.0?(2000),?vgos_dba[vgos_dba]@[10.130.229.196]SELECT?FROM?sms_send?WHERE?service_id=N?GROUP?BY?content?LIMIT?N,?N
</p>
mysqldumpslow的詳細分析結果:
Count:#表示該類(lèi)型的語(yǔ)句執行次數,上圖中表示 select 語(yǔ)句執行了 2 次。
Time:#表示該類(lèi)型的語(yǔ)句執行的平均時(shí)間(總計時(shí)間)
Lock:#鎖時(shí)間?0s。
Rows:#單次返回的結果數是 1000?條記錄,2 次總共返回 2000?條記錄。
通過(guò)這個(gè)工具,可以找出哪些SQL語(yǔ)句是慢SQL,從而反饋給研發(fā)優(yōu)化,比如加索引,應用的實(shí)現方式等等。
常見(jiàn)的慢 SQL 故障排除
沒(méi)有子查詢(xún)
SELECT?FROM?t1?WHERE?id?(SELECT?id?FROM?t2?WHERE?name=’hechunyang’);
在MySQL 5.5中,內部執行計劃器是這樣執行子查詢(xún)的:先查外表再匹配內表,而不是先查內表t2。當外表的數據很大時(shí),查詢(xún)速度會(huì )很慢。
在MariaDB10/MySQL5.6版本中,使用join關(guān)聯(lián)方式進(jìn)行了優(yōu)化,這條SQL會(huì )自動(dòng)轉換為SELECT t1。從 t1 加入 t2 在 t1.id = t2.id;
但請注意,優(yōu)化僅對 SELECT 有效,對 UPDATE/DELETE 子查詢(xún)無(wú)效。在生產(chǎn)環(huán)境中,盡量避免使用子查詢(xún)。
避免功能索引
SELECT?FROM?t?WHERE?YEAR(d)?>=?2016;
由于MySQL不像Oracle那樣支持函數式索引,即使d字段有索引,也會(huì )直接掃描全表。
應改為 >SELECT FROM t WHERE d >= '2016-01-01';
用 IN 替換 OR 低效查詢(xún)
慢 SELECT FROM t WHERE LOC_ID = 10 OR LOC_ID = 20 OR LOC_ID = 30;
高效查詢(xún)>SELECT FROM t WHERE LOC_IN IN (10,20,30);
LIKE 雙百分號不能使用索引
SELECT?FROM?t?WHERE?name?LIKE?‘%de%’;
利用
SELECT?FROM?t?WHERE?name?LIKE?‘de%’;
分組統計可以禁用排序
SELECT?goods_id,count()?FROM?t?GROUP?BY?goods_id;
默認情況下,MySQL 對所有 GROUP BY col1, col2... 字段進(jìn)行排序。如果查詢(xún)收錄 GROUP BY 并且你想避免使用排序后的結果,你可以指定 ORDER BY NULL 來(lái)禁用排序。
使用 SELECT goods_id,count () FROM t GROUP BY goods_id ORDER BY NULL;
禁止不必要的 ORDER BY 排序
SELECT?count(1)?FROM?user?u?LEFT?JOIN?user_info?i?ON?u.id?=?i.user_id?WHERE?1?=?1?ORDER?BY?u.create_time?DESC;
使用 SELECT count (1) FROM user u LEFT JOIN user_info i ON u.id = i.user_id;
總結
任何事情都不要過(guò)分注重外表,而要注重內在的東西,往往在華麗的外表下會(huì )有相應的負擔和損失。
mysql數據庫的監控支持通過(guò)SQL從performance_schema庫中訪(fǎng)問(wèn)對應的表數據,前提是該庫已初始化并開(kāi)啟監控數據寫(xiě)入。
對于監控,不是手段的多樣性,而是監控的本質(zhì)和需要監控的項目?jì)热?,這樣才能找到適合自己項目特點(diǎn)的監控方式。
在選擇監控mysql的監控工具時(shí),需要注意監控工具本身對數據庫服務(wù)器的消耗,以免影響自身使用。