mysql 優化 運維 mysql 效能優化

2021-10-17 22:49:07 字數 2341 閱讀 3355

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 運維常見操作

mysql密碼的恢復方法之一 1 首先確認伺服器出於安全的狀態,也就是沒有人能夠任意地連線mysql資料庫。因為在重新設定mysql的root密碼的期間,mysql資料庫完全出於沒有密碼保護的 狀態下,其他的使用者也可以任意地登入和修改mysql的資訊。可以採用將mysql對外的埠封閉,並且停止ap...

mysql常用運維 (MYSQL常用運維指令)

1 mysql執行狀態 service mysqld status service mysqld start service mysqld stop 2 檢視sql程序,清理sql程序 show full processlist kill 2920578 3 賬號建立 資料庫授權 4 密碼修改 my...

MySQL 日常運維

正規化和反正規化 正規化和反正規化是庫表設計過程中的概念 目前關聯式資料庫有六種正規化,越高的正規化資料庫冗餘越小 正規化化可以較少冗餘,從而減少了在更新資料時一致性方面的開銷 反正規化化由於冗餘的資料,在複雜的查詢場景下,可以避免聯合查詢和子查詢,提高查詢的效率 根據業務場景,選擇合適的正規化等級...