定位數(shù)據(jù)庫慢查詢SQL有多種方式,根據(jù)具體使用的數(shù)據(jù)庫種類和經(jīng)濟實力來定:
一、使用APM產(chǎn)品APM全程為Application Performance Management,軟硬件解決方案都有,如果經(jīng)濟實力不錯,直接買大廠商的APM產(chǎn)品最為省時省力,而且還附帶報警和分析功能。
APM不僅是管理數(shù)據(jù)庫性能的,還可以對應用服務器進行檢測,對Java、.NET、PHP、Ruby、Python、NodeJS等語言開發(fā)的應用程序性能進行監(jiān)測。
目前市面上很多,有像深信服等提供的集成在硬件中的一體機式的,還有一些純軟件的APM產(chǎn)品,例如像OneAPM那樣即可以本地部署的,還可以本地安裝彈針然后云端SaaS部署的。這里就不一一列舉了,大家可以根據(jù)自己預算找相應的廠家咨詢。
二、使用專門的數(shù)據(jù)庫監(jiān)測產(chǎn)品市面上還有一類小眾的專門針對數(shù)據(jù)庫的產(chǎn)品。大部分都是多年DBA在自己多年的數(shù)據(jù)庫運維經(jīng)驗基礎上針對某種數(shù)據(jù)庫定制的監(jiān)測系統(tǒng),除了針對數(shù)據(jù)庫各個性能指標進行監(jiān)測報警外,還提供智能分析和性能優(yōu)化等服務。
例如作為微軟中國SQL Server金牌合作伙伴的北京格瑞趨勢公司所推出的SQL專家云等產(chǎn)品,是專門針對微軟SQL Server數(shù)據(jù)庫某一段時間的采樣數(shù)據(jù)分析、診斷,主要的應用場景包括:對數(shù)據(jù)庫進行體檢,自動形成體檢報告;分析當前系統(tǒng)存在的問題及隱患;分析采樣時段的性能問題及根源;分析數(shù)據(jù)庫的參數(shù)配置及索引;自動優(yōu)化并生產(chǎn)可執(zhí)行的腳本。
三、使用開源運維監(jiān)控系統(tǒng)例如Zabbix、Nagios、Grafana、Open-falcon等,這些開源系統(tǒng)同APM產(chǎn)品類似,但主要是提供給服務器運維人員使用的,內(nèi)置了一部分數(shù)據(jù)庫監(jiān)控的功能,有的插件很多,功能和界面都還是不錯的。
但是開源產(chǎn)品的安裝和使用需要有較高水平的運維人員來使用,需要自己來摸索適合的方式,針對性也不夠強。而且由于缺少支持,遇到問題解決起來比較麻煩。
四、使用數(shù)據(jù)庫系統(tǒng)自身的日志功能許多數(shù)據(jù)庫的日志系統(tǒng)都帶有慢查詢記錄功能,對于流量不大的系統(tǒng),又不想投入大量金錢,可以先直接使用數(shù)據(jù)庫日志來記錄慢查詢,然后定期匯總分析,持續(xù)優(yōu)化應用程序系統(tǒng)。一般用在開發(fā)期,或系統(tǒng)剛上線的試運行期。
例如MySQL的慢查詢?nèi)罩荆脕碛涗浽贛ySQL中響應時間超過閥值的語句,具體指運行時間超過long_query_time值的SQL,則會被記錄到慢查詢?nèi)罩局小ong_query_time的默認值為10,意思是運行10S以上的語句。默認情況下,Mysql數(shù)據(jù)庫并不啟動慢查詢?nèi)罩荆枰覀兪謩觼碓O置這個參數(shù),當然,如果不是調(diào)優(yōu)需要的話,一般不建議啟動該參數(shù),因為開啟慢查詢?nèi)罩緯蚨嗷蛏賻硪欢ǖ男阅苡绊憽?/p>MySQL 慢查詢的相關參數(shù)解釋:
slow_query_log :是否開啟慢查詢?nèi)罩荆?表示開啟,0表示關閉。log-slow-queries :舊版(5.6以下版本)MySQL數(shù)據(jù)庫慢查詢?nèi)罩敬鎯β窂健?梢圆辉O置該參數(shù),系統(tǒng)則會默認給一個缺省的文件host_name-slow.logslow-query-log-file:新版(5.6及以上版本)MySQL數(shù)據(jù)庫慢查詢?nèi)罩敬鎯β窂健?梢圆辉O置該參數(shù),系統(tǒng)則會默認給一個缺省的文件host_name-slow.loglong_query_time :慢查詢閾值,當查詢時間多于設定的閾值時,記錄日志。log_queries_not_using_indexes:未使用索引的查詢也被記錄到慢查詢?nèi)罩局校蛇x項)。log_output:日志存儲方式。log_output='FILE'表示將日志存入文件,默認值是'FILE'。log_output='TABLE'表示將日志存入數(shù)據(jù)庫,這樣日志信息就會被寫入到mysql.slow_log表中。MySQL數(shù)據(jù)庫支持同時兩種日志存儲方式,配置的時候以逗號隔開即可,如:log_output='FILE,TABLE'。日志記錄到系統(tǒng)的專用日志表中,要比記錄到文件耗費更多的系統(tǒng)資源,因此對于需要啟用慢查詢?nèi)罩荆中枰軌颢@得更高的系統(tǒng)性能,那么建議優(yōu)先記錄到文件。Postgrsql也有類似的慢查詢?nèi)罩居涗浄绞剑琍ostgreSQL 日志支持的輸出格式有 stderr(默認)、csvlog 、syslog。一般的錯誤跟蹤,只需在配置文件“postgresql.conf”簡單設置幾個參數(shù),當然還有錯誤級別等要設置。
Postgresql 慢查詢配置相關參數(shù):
logging_collector = onlog_destination = 'stderr'log_directory = 'log'log_filename = 'postgresql-%Y-%m-%d_%H%M%S.log'
查詢控制臺查看當前慢查詢設置:show log_min_duration_statement;===>5s