MySQL常規最佳化

來源:互聯網
上載者:User

標籤:監控   網卡   解決方案   流量   頻寬   

MySQL最佳化

                                                                                    --何旭東

650) this.width=650;" src="http://s5.51cto.com/wyfs02/M01/82/F8/wKioL1dnnZ2BRTIHAABANBXUs0E228.jpg" title="123.jpg" alt="wKioL1dnnZ2BRTIHAABANBXUs0E228.jpg" />

MySQL使用記憶體

650) this.width=650;" src="http://s3.51cto.com/wyfs02/M02/82/F8/wKiom1dnnXvwWlwdAAC-RhqEAwc760.jpg" title="122.jpg" alt="wKiom1dnnXvwWlwdAAC-RhqEAwc760.jpg" />


引擎的特點

     Comment: Supports transactions, row-level locking, and foreign keys

 

Supports transactions:事務

 row-level locking:行鎖

foreign keys:外鍵。

 

Transactions:表示是否支援交易處理,YES表示支援,NO表示不支援。

XA:表示是否分布式交易處理XA規範,YES表示支援,NO表示不支援。

Savepoints:表示是否支援儲存點,以便交易回復到儲存點,YES表示支援,NO表示不支援。

 

目前InnoDB採用雙軌授權,一個是GPL授權,另一個則是專有軟體授權。

InnoDB儲存引擎給MySQL資料庫提供了具有事務,復原和崩潰修複能力,多版本並發控制的事務安全性表。InnoDB儲存引擎也提供了行級鎖。

優勢:良好的交易管理,崩潰修複能力和並發控制。

缺點:讀寫效率稍差,佔用資料空間相對較大。

 

3個方面介紹InnoDB的特點:

1 InnoDB儲存引擎中儲存表和索引有兩種方式:共用資料表空間儲存和多資料表空間儲存。

共用資料表空間儲存。建立的表結構儲存在尾碼是.frm的檔案中,資料和索引存在innodb_data_home_dir和innodb_data_file_path定義的資料表空間中。

多資料表空間儲存。建立的表結構儲存在尾碼名是.frm的檔案中,但是每個表的資料和索引單獨儲存在.ibd檔案中。如果為分區表,則每個分區表對應單獨的.ibd檔案,檔案名稱是表明+分區名。如果為分區表,則每個分區表對應單獨的.ibd檔案,檔案名稱是表名+分區名。使用多資料表空間儲存需要設定參數innodb_file_per_table,並且重啟服務才會生效,只對建立表有效。

2 InnoDB儲存引擎支援外鍵,外鍵所在的表為子表,外鍵所依賴的表為夫表。夫表被子表外部索引鍵關聯的欄位必須為主鍵。如果刪除,修改夫表中的某條資訊時,子表也必須有相應改變。

3 InnoDB儲存引擎支援自動成長列AUTO_INCREMENT,自動成長列的值不可為空,而且值必須唯一。另外在MySQL資料庫中規定自增列必須為主鍵,再插入值時,自動成長分為3種情況。

一、如果自動成長列不輸入值,則插入的列自動成長後的值。

二、如果輸入的值為0或空(NULL),則插入的值也為自動成長後的值。

三、如果插入某個確定的值,且該值在前面的資料沒有出現過,則可以直接插入。

線程特點

#在5.1的4個FILE_iO 線程包括: 
insert buffer thread
log thread 
read thread
write thread

#而在5.5, 總共有10個FILE_IO線程
(insert buffer thread) * 1
(log thread) * 1 
(read thread) * 4 
(write thread) * 4

常規最佳化的十個參數

(1)、max_connections: 
(2)、record_buffer: 
(3)、key_buffer_size: 
4)、back_log: 
(5)、interactive_timeout: 
(6)、sort_buffer: 
(7)、table_cache: 
(8)、thread_cache_size: 
(9)、mysql的搜尋功能 
(10)、wait_timeout: 

系統層IO調度演算法

noop anticipatory deadline [cfq] 
deadline :    deadline 演算法保證對既定的IO請求以最小的延遲時間。
anticipatory:    有個IO發生後,如果又有進程請求IO,則產生一個預設6ms猜測時間,猜測下一個進程請求IO是幹什麼。這對於隨機讀取會造成較大的延時。
        對資料庫應用很糟糕,而對於Web Server等則會表現不錯。
cfq:        對每個進程維護一個IO隊列,各個進程發來的IO請求會被cfq以輪循方式處理,對每一個IO請求都是公平。適合離散讀的應用。
noop:        對所有IO請求都用FIFO隊列形式處理。預設IO不會存在效能問題。

最佳化swap分區

預設60,當swap空間使用達到60%的時候,開始釋放實體記憶體中的cache/buffers。

刷磁碟機制

mysql日誌操作步驟 :log_buffer ---mysql寫 (write)---> log_file ---OS重新整理(flush)---> disk

0:log buffer中的資料將以每秒一次的頻率寫入到log file中,且同時會進行檔案系統到磁碟的同步操作,但是每個事務的commit並不會觸發任何log buffer 到log file的重新整理或者檔案系統到磁碟的重新整理操作;

1:在每次事務提交的時候將log buffer 中的資料都會寫入到log file,同時也會觸發檔案系統到磁碟的同步;

2:事務提交會觸發log buffer 到log file的重新整理,但並不會觸發磁碟檔案系統到磁碟的同步。此外,每秒會有一次檔案系統到磁碟同步操作。

具體的展示

0(延遲寫): log_buffer  --每隔1秒--> log_file  —即時—> disk

1(即時寫,即時刷): log_buffer  —即時—>  log_file  —即時—> disk

2(即時寫,延遲刷): log_buffer  —即時—> log_file --每隔1秒-->disk

進程管理思想

殭屍進程:一個子進程在其父進程沒有調用wait()或waitpid()的情況下退出。這個子進程就是殭屍進程。如果其父進程還存在而一直不調用wait,則該殭屍進程將無法回收,等到其父進程退出後該進程將被init回收。
孤兒進程:一個父進程退出,而它的一個或多個子進程還在運行,那麼那些子進程將成為孤兒進程。孤兒進程將被init進程(進程號為1)所收養,並由init進程對它們完成狀態收集工作。
殭屍進程將會導致資源浪費,而孤兒則不會。

 

最多可以多少個進程同時存在

[email protected] ~]$ cat/proc/sys/kernel/pid_max
32768

linux負載,是核心數的3倍

Linux允許的最大進程數可以通過 ulimit -u來查看


 


本文出自 “晴空” 部落格,謝絕轉載!

MySQL常規最佳化

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.