MYSQL效能優化

2021-08-30 01:20:43 字數 2719 閱讀 7418

在linux下安裝mysql自然不是太難,但是預設配置安裝的mysql卻未必工作在最佳效能狀態,這時就需要我們對其進行優化了。一般認為在mysql的配置檔案中,下列系統引數是比較關鍵的:

(1)interactive_timeout

伺服器在關閉它前在乙個互動連線上等待行動的秒數。乙個互動的客戶被定義為對 mysql_real_connect()使用 client_interactive 選項的客戶。 預設數值是28800,我把它改為7200。

(2)back_log

要求 mysql 能有的連線數量。當主要mysql執行緒在乙個很短時間內得到非常多的連線請求,這個引數就會起作用,然後主線程花些時間(儘管很短)檢查連線並且啟動乙個新執行緒。

back_log 值指出在mysql暫時停止回答新請求之前的短時間內多少個請求可以被存在堆疊中。只有如果期望在乙個短時間內有很多連線,你需要增加它,換句話說,這值對到來的tcp/ip連線的偵聽佇列的大小。每個作業系統在這個佇列大小上都有它自己的限制。 試圖設定back_log高於作業系統的限制將是無效的。

mysql中back_log的設定取決於作業系統

linux下這個引數的值不能大於系統引數tcp_max_syn_backlog的值

通過以下命令可以檢視tcp_max_syn_backlog的當前值

cat  /proc/sys/net/ipv4/tcp_max_syn_backlog

通過以下命令進行修改sysctl -w net.ipv4.tcp_max_syn_backlog=n

深入**一點

tcp/ip網路一般會有如下過程

從生成socket到bind埠在listen進而建立連線

具體到listen,

就是listen(int fd, int backlog)的呼叫,這裡backlog和mysql中back_log具有一定的關係,即作業系統backlog的要不小於mysql中back_log的值,在linux核心2.6.6中backlog在/include/net/tcp.h中由tcp_synq_hsize變數定義

觀察一下主機程序列表,如果發現大量 264084 | unauthenticated user | ***.***.***.*** | null | connect | null | login | null 的待連線程序時,就有必要加大 back_log 的值了。預設數值是50,我把它改為500。

(3)max_connections

允許的同時客戶的數量。增加該值增加 mysqld 要求的檔案描述符的數量。這個數字應該增加,否則,你將經常看到 too many connections 錯誤。 預設數值是100,我把它改為1024 。

(4)key_buffer_size

索引塊是緩衝的並且被所有的執行緒共享。key_buffer_size是用於索引塊的緩衝區大小,增加它可得到更好處理的索引(對所有讀和多重寫),到你能負擔得起那樣多。如果你使它太大,系統將開始換頁並且真的變慢了。預設數值是8388600(8m),我的mysql主機有2gb記憶體,所以我把它改為 402649088(400mb)。

是否要增加這個引數的值主要看以下兩點:

1、key_reads/key_read_requests:比例應該接近於0.01甚至越小越好

2、key_writes/key_write_requests:比例接近1較好

解決的辦法當然是增加key_buffer_size的值啦,來實在的到控制台下面執行:

程式**

set global key_buffer_size=16777216;

這是設定全域性的,如果只是當前會話的話,將global換成session即可。

(5)record_buffer

每個進行乙個順序掃瞄的執行緒為其掃瞄的每張表分配這個大小的乙個緩衝區。如果你做很多順序掃瞄,你可能想要增加該值。預設數值是131072(128k),我把它改為16773120 (16m)

(6)sort_buffer

每個需要進行排序的執行緒分配該大小的乙個緩衝區。增加這值加速order by或group by操作。預設數值是2097144(2m),我把它改為 16777208 (16m)。

(7)table_cache

為所有執行緒開啟表的數量。增加該值能增加mysqld要求的檔案描述符的數量。mysql對每個唯一開啟的表需要2個檔案描述符。預設數值是64,我把它改為512。

(8)thread_cache_size

可以復用的儲存在中的執行緒的數量。如果有,新的執行緒從快取中取得,當斷開連線的時候如果有空間,客戶的線置在快取中。如果有很多新的執行緒,為了提高效能可 以這個變數值。通過比較 connections 和 threads_created 狀態的變數,可以看到這個變數的作用。我把它設定為 80。

(9)wait_timeout

伺服器在關閉它之前在乙個連線上等待行動的秒數。 預設數值是28800,我把它改為7200。

注:引數的調整可以通過修改 /etc/my.cnf 檔案並重啟 mysql 實現。很明顯的,根據伺服器的硬體配置的不同,和mysql資料庫負載的不同,引數的設定也是不同的。所以大家不要照搬上面的引數,而是要根據不同的硬體和負載修改為最適合自己的引數。

mysql效能優化 mysql效能優化

優化方式 1.空間換時間 冗餘 2.時間換空間 字段優先使用型別 int date char varchar text 索引型別 btree索引 hash索引 索引的葉子下,存放乙個資訊指向所在行的資料位址。btree有利於範圍查詢,hash有利於精確查詢。btree用的更多一些。btree索引的常...

mysql的效能優化 mysql效能優化

檢視安裝指令碼 select version 非互動式超時時間,如jdbc show global variables like wait timeout 互動式超時時間,如資料庫工具 show global variables like interactive timeout show sessi...

mysql 效能優化 命令 mysql效能優化

發現問題 當發現程式執行比較慢的時候,首先排除物力資源問題之後,就將注意力轉向mysq資料庫 1 首先確定執行慢的sql語句 mysql show full processlist 2 確認低效的查詢 多次執行第一步發現time耗費大的sql語句。檢視耗費的時間。3 分析效能 為sql生成乙個執行計...