MySQL相關問題
- 一、MySQL支持哪些存儲引擎?
- 二、MySQL是如何執行一條SQL的?
- 三、MySQL數據庫InnoDB存儲引擎是如何工作的?
- 四、如果要對數據庫進行優化,該怎么優化?
- 五、MySQL如何定位慢查詢?
- 六、如何分析MySQL慢查詢日志?
一、MySQL支持哪些存儲引擎?
查詢數據版本:
select version();
查詢數據存儲引擎:
show engines;
二、MySQL是如何執行一條SQL的?
三、MySQL數據庫InnoDB存儲引擎是如何工作的?
四、如果要對數據庫進行優化,該怎么優化?
1、服務器硬件:cpu、內存、磁盤io、網卡流量;
2、服務器的操作系統:Linux的配置參數不同性能不同;
3、數據庫存儲引擎的選擇:根據需要選擇不同的存儲引擎,MyISAM
不支持事務,表級鎖;InnoDB
事務級存儲引擎,完美支持行級鎖和事務ACID特性;
4、數據庫自身配置參數:MySQL有上百項的數據庫配置參數;(my.cnf
)
5、數據庫表結構的設計和SQL語句的執行效率:慢查詢是性能問題的罪魁禍首,不合理的數據庫表結構設計和不合理的索引是影響數據庫查詢性能的重要因素;
6、數據庫架構:高并發下讀寫分離、大數據量分庫分表、多級緩存、搜索引擎;
五、MySQL如何定位慢查詢?
定位慢查詢主要有如下幾種方式:
1、業務驅動,主要是業務及運營人員或者用戶反饋給我們的,他們在使用系統的過程中發現某些功能很慢,這種方式一般是項目上線后出現的,開發人員會比較被動,建議不要采用這種方式;
2、測試驅動,系統上線前通過測試人員的反饋,了解到哪些功能比較慢;
3、系統跟蹤監控,比如工具Prometheus、SkyWalking(微服務中使用);
4、慢查詢日志,通過開啟MySQL慢查詢日志監控慢查詢sql并及時進行優化;
show variables like '%quer%';
修改my.cnf
文件
slow_query_log = ON #開啟慢查詢
long_query_time = 2 #查詢時間
log_queries_not_using_indexes = ON #沒有命中索引
六、如何分析MySQL慢查詢日志?
在MySQL的 bin 目錄下,慢查詢日志分析工具,查看幫助:
./mysqldumpslow --help# 按平均查詢時間排序,顯示前十條
./mysqldumpslow -t 10 -s at /usr/local/mysql-8.0.33/data/localhost-slow.log
結果說明:Count: 2 Time=0.01s (0.02s) Lock=0.00s (0s) Rows=3.0 (6), root[root]@[192.168.0.1]
-
Count:2,告訴我們這種類型的語句執行了2次;
-
Time=0.01s(0.02s),告訴我們這類語句執行的最大時間0.01s,總共花費的時間是0.02s;
-
Lock=0.00s(0s) 鎖的時間;
-
Rows=3.0 (6) 單次返回的結果數為3條記錄,2次總共返回6條記錄;