mysql資料庫調優

2021-09-29 02:02:14 字數 4823 閱讀 7479

由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...