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