由8個功能模組組成:
管理工具:安裝服務軟體後,提供的命令mysqldump,mysqlbinlog,mysqladmin
連線池:當接收到客戶端的請求後,檢查是否有資源相應客戶端的連線請求
sql介面:把sql傳遞給mysql執行緒處理
分析器:檢查執行的sql命令是否有語法錯誤,是否有訪問許可權
優化器:優化執行的sql命名,以最節省資源的方式執行sql命令
查詢快取:快取曾經查詢到的記錄,查詢快取的儲存空間是從物理記憶體劃分出來的,用來儲存查詢過的查詢結果
儲存引擎:是表的處理器,不同的儲存引擎有不同的儲存功能和資料儲存方式:myisam 、 innodb
檔案系統:儲存表中記錄的磁碟
如何優化mysql資料庫伺服器(哪些原因導致資料庫伺服器處理客戶端的連線請求慢)
硬體的配置低導致處理速度慢 cpu 記憶體 儲存磁碟
cpu應不低於16核、 記憶體上g、 儲存磁碟上t 轉速:15000/s
uptime
free -m
top -->0.0 wa
網路頻寬窄 用網路測試軟體可以知道
提供服務的軟體版本過低導致效能低下:
檢視服務執行時的引數配置
mysql> show variables;
mysql> show variables like "%innodb%";
檢視併發連線數量
show variables like "%conn%";
mysql> show variables like "max_connections%";
+-----------------+-------+
| variable_name | value |
+-----------------+-------+
| max_connections | 151 |
+-----------------+-------+
修改變數的值
命令列修改
set 【global】變數名=值;
set global max_connections = 500;
mysql> show variables like "max_connections%";
永久修改:
vim /etc/my.cnf
變數名=值
怎樣設定才算合理:
有過的最大連線數/併發連線數約等於0.85的時候才最合理
max_used_connections/max_connections=0.85
500/x=0.85*100%=85%
檢視有過的最大連線數
show global status like "%conn%";
show global status like "max_used_connections";
set global max_connections=數字;
flush status //重新整理連線的值(清零)
mysql> show variables like "max_connections%";
+-----------------+-------+
| variable_name | value |
+-----------------+-------+
| max_connections | 152 |
+-----------------+-------+
連線超時時間
show variables like "%timeout%"; //timeout字樣的全部列出來
connect_timeout | 10
//客戶端與伺服器建立連線時tcp三次握手的超時時間10s
wait_timeout | 28800
//客戶端與伺服器建立連線後,等待執行sql命令的超時時間28800s
可以恢復使用的執行緒數量
執行緒:thread
show variables like "%thread%";
thread_cache_size | 9 //可以重複使用的執行緒的數量
所有執行緒同時開啟表的數量
mysql> show variables like "%table%";
table_open_cache | 2000 //預設2000張
與查詢相關引數的配置
key_buffer-size 索引快取的大小(預設8m)
index primary key foreign key
show variables like "key_buffer_size%";
sort_buffer_size:為每個要排序的執行緒分配此大小的快取空間
read_buffer_size:為順序讀取表記錄保留的快取大小
name---> index
select * from t1 where name="jim"; key_buffer_size
select * from t1 order by 欄位名; sort_buffer_size
select * from t1; read_buffer_size
select * from t1 group by 欄位名; read_rnd_buffer_size
與查詢快取相關引數的配置
mysql> show variables like "query_cache%";
+------------------------------+---------+
| variable_name | value |
+------------------------------+---------+
| query_cache_limit | 1048576 | //查詢快取超過這個值預設(1m)就不允許放到快取裡 1048576除以1024
| query_cache_min_res_unit | 4096 | //查詢快取最小儲存單元4k 4096除以1024
| query_cache_size | 1048576 | //查詢快取的大小預設(1m)
| query_cache_type | off | //查詢快取型別 預設關(off )
| query_cache_wlock_invalidate | off | //查詢快取寫鎖無效是關閉的即寫鎖是有效的
+------------------------------+---------+
當對myisam儲存引擎的表執行查詢時,若檢查到有對錶做寫的sql操作,不從查詢快取裡查詢資料快取返回
給客戶端,而是等寫操作完成後,重新從表裡查詢資料返回給客戶端
檢視當前的查詢快取統計狀態
mysql> show global status like "%qcache%";
| qcache_hits | 0 | //在查詢快取查詢到資料的次數
| qcache_inserts | 0 | //記錄在查詢快取裡查詢資料的次數
| qcache_lowmem_prunes | 0 | //清理查詢快取空間重新整理的次數,清理一次,它的值加一次
程式設計師編寫的sql查詢語句太複雜,導致資料庫伺服器處理速度慢
開啟資料庫伺服器的慢查詢日誌,記錄超過指定時間(預設10s)顯示查詢結果的sql命令
mysql資料庫服務日誌型別:
vim /etc/my.cnf
[mysqld]
general-log
# systemctl restart mysqld
cat /var/lib/mysql/主機名.log
cat /var/lib/mysql/db55.log
# vim /etc/my.cnf
[mysqld]
slow-query-log
slow-query-log-file=db55
long-query-time=2 //指定超時時間
log-queries-not-using-indexes //記錄沒有使用索引做查詢的命令
# systemctl restart mysqld
檢視日誌檔案內容
cat /var/lib/mysql/主機名-slow.log
mysql -uroot -p123456
mysql> select sleep(4); //休眠4s再查詢,日誌裡會有記錄,不超過2s不會記錄
tailf /var/lib/mysql/db55-slow.log
統計慢查詢日誌檔案記錄資訊
# mysqldumplow /var/lib/mysql/db55-slow.log > /tmp/sql.txt
5、網路架構有問題(有資料傳輸瓶頸) mysql資料庫調優
mysql資料庫調優知識分享 在進行資料庫調優時,應從以下三方面進行考慮 一 如何提高mysql快取命中率 一是在配置時,客戶端與伺服器端要使用相同的字符集而不是相容 二是在客戶端,要固化查詢的語句,從而可提高應用系統的查詢效率 三是提高記憶體中快取的配置,不過使用者的併發數越多,這個設定的效果會越...
mysql 資料庫調優
1.在sql語句查詢時,盡量不使用select 進去全表查詢,首先要考慮在where及order by 語句上的列上增加索引,一定經常需要進行檢索的字段上建立索引,但是需要注意的是乙個表的索引數最好不要超過6個,要考慮在一些不常用的字段上加索引是否有必要,索引太多反而會失去加索引的效果 同時也會降低...
MySQL資料庫調優
1 全部採用64位版本 64mysql 2 選擇穩定核心 權衡穩定,效能,功能 3 調整系統預設配置引數 例如tcp ip堆疊連線數 檔案控制代碼數 程序個數 vim etc sysctl.conf net.ipv4.ip local port range 32768 61000 vim etc s...