MySQL效能優化 一)

2021-09-16 12:24:59 字數 2810 閱讀 1705

mysql是乙個開源的小型關聯式資料庫,也是目前應用最廣泛的。最近學習了mysql的效能調優,感覺一下子接觸很多之前不了解的東西,這些優化應該來說是非常實用的,所以這裡打算寫乙個系列的部落格來整理下。

眾所周知,mysql能安裝在各大作業系統上,特別是對於很多個人開發者,都喜歡把開發放在windows上面,但是實際上線的專案都是需要部署到伺服器上。雖然說windows也能作伺服器,但實際應用中比較少,而更多的是使用基於linux的centos系統,原因自然是穩定安全性高,並且centos也是免費的作業系統。

所以這裡是針對mysql的效能進行的centos系統引數的優化。

核心相關引數在/etc/sysctl.conf中修改

網路相關引數

1.這個引數決定每個埠最大監聽佇列的長度,這個值預設狀態下比較小,對於負載較大的伺服器肯定是不夠的,一般都要調到2048或者以上,具體情況看需要。

net.core.somaxvconn = 65535
2.每個網路介面接收資料報的速率比核心處理這些包的速率快時,允許傳送到佇列的資料報的最大數目

net.core.netdev_max_backlog = 65535
3.還未獲得連線的請求,可儲存到佇列的最大數目,超過這個數目的資料報就會被拋棄

net.ipv4.tcp_max_syn_backlog = 65535
4.控制tcp連線等待處理的時間,加快tcp處理的**,如果有大量資料庫連線的請求,而tcp連線又被佔滿的話,就會出現資料庫連線錯誤。這也是為什麼有些**遭ddos後出現資料庫連線的錯誤。

net.ipv4.tcp_fin_timeout = 10

net.ipv4.tcp_tw_reuse = 1

net.ipv4.tcp_tw_recycle = 1

5.設定tcp連線、接收和傳送緩衝區大小的預設值和最大值

net.core.wmem_default = 87380

net.core.wmem_max = 16777216

net.core.rmem_default = 87380

net.core.rmem_max = 16777216

6.設定tcp開始傳送keepalive探測訊息的時間間隔。單位是秒,用於檢驗tcp連線是否有效。

net.ipv4.tcp_keepalive_time = 120
7.傳送兩個tcp keepalive探測資料報的間隔時間

net.ipv4.tcp_keepalive_intvl = 30
8.設定keepalive探測包失效之前,允許傳送keepalive探測資料報的最大數量。

net.ipv4.tcp_keepalive_probes = 3
記憶體相關引數

1.設定單個共享記憶體段的最大值

kernel.shmmax = 4294967295
ps:這個引數應該設定足夠大,以便能在乙個共享記憶體段下容納下整個innodb緩衝池的大小。這個值的大小對於64位linux系統,可取的最大值為物理記憶體值-1byte,建議值為大於物理記憶體的一半,一般取值大於innodb緩衝池的大小即可。

2.控制除非linux核心的虛擬記憶體滿了,否則不要使用交換區。

ps:在linux系統安裝時都有乙個系統交換分割槽,而當作業系統因為沒有足夠記憶體時,就會將一些虛擬記憶體寫到磁碟的交換區中。這樣就會發生記憶體交換,進而會影響到mysql的效能,但是如果禁用掉交換分割槽,將會降低作業系統的效能,容易造成記憶體溢位和崩潰,或者所有程序都被作業系統強制關閉,所以這樣設定能保證最優。

這個修改檔案/etc/security/limit.conf

1.控制開啟檔案限制

* soft nofile 65535

* hard nofile 65535

ps: 這裡直接加到limit.conf檔案的末尾。*表示對所有使用者有效 ,soft指當前系統生效的設定,hard表明系統中所能設定的最大值,nofile表示所限制的資源是開啟檔案的最大數目,65535就是限制的數量。最後,這個檔案的修改需要重啟才生效

這個直接命令列輸入

1.noop(電梯式排程策略)

2.deadline(截止時間排程策略)

3.anticipatory(預料i/o排程策略)

所以對資料庫選擇deadline策略比較好,然後看命令

echo deadline > /sys/block/devname/queue/scheduler
這裡修改/etc/fstab

/dev/ada1/ext4   noatime,nodiratime,data=writeback 11
ps:writeback表示寫入日誌時原資料和當前資料是不同步的,noatime,nodiratime表示禁止記錄檔案的訪問時間和讀取目錄的時間,這樣可以減少寫操作。

這第一篇mysql效能的調優就先到這裡了。

首發 legend'blog

mysql效能優化 一

mysql裡面的所分為表鎖和行鎖不同儲存引擎它的鎖也不一樣,innodb有表鎖和行鎖,而mysiam只有表鎖 1.set autocommit 0 取消自動提交 2.使用a,b兩個視窗分別update同一行資料,過濾條件必須是索引,因為索引是行鎖,非索引是表鎖 a視窗先update資料,b視窗後up...

MySQL效能優化一

1.檢視mysql的可以承受的最大連線數,登入到mysql伺服器後,輸入以下命令,如出現下面的頁面顯示 max connections 表示的是伺服器所能承受的最大連線數 用來設定最大連線 使用者 數。總體來說,該max connections2.檢視當前連線資料庫的使用者 show process...

mysql效能優化 mysql效能優化

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