程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> MySQL綜合教程 >> 關於MySQL 優化的100個的建議

關於MySQL 優化的100個的建議

編輯:MySQL綜合教程

關於MySQL 優化的100個的建議。本站提示廣大學習愛好者:(關於MySQL 優化的100個的建議)文章只能為提供參考,不一定能成為您想要的結果。以下是關於MySQL 優化的100個的建議正文


MySQL是一個功效壯大的開源數據庫。跟著愈來愈多的數據庫驅動的運用法式,人們一向在推進MySQL成長到它的極限。這裡是100條調理和優化MySQL裝置的技能。一些技能是針對特定的裝置情況的,但這些思緒是通用的。我曾經把他們分紅幾類,來贊助你控制更多MySQL的調理和優化技能。

  MySQL 辦事器硬件和操作體系調理:

  1. 具有足夠的物理內存來把全部InnoDB文件加載到內存中——在內存中拜訪文件時的速度要比在硬盤中拜訪時快的多。

  2. 不吝一切價值防止應用Swap交流分區 – 交流時是從硬盤讀取的,它的速度很慢。

  3. 應用電池供電的RAM(注:RAM即隨機存儲器)。

  4. 應用高等的RAID(注:Redundant Arrays of Inexpensive Disks,即磁盤陣列) – 最好是RAID10或更高。

  5. 防止RAID5(注:一種存儲機能、數據平安和存儲本錢統籌的存儲處理計劃) – 確保數據庫完全性的校驗是要支付價值的。

  6. 將操作體系和數據分辨別開,不只僅是邏輯上,還包含物理上– 操作體系的讀寫操作會影響數據庫的機能。

  7. 把MySQL暫時空間和復制日記與數據放到分歧的分區– 當數據庫後台從磁盤停止讀寫操作時會影響數據庫的機能。

  8. 更多的磁盤空間等於更快的速度。

  9. 更好更快的磁盤。

  10. 應用SAS(注: Serial Attached SCSI,即串行銜接SCSI)取代SATA(注:SATA,即串口硬盤)。

  11. 較小的硬盤 比 較年夜的硬盤快,特別是在RAID設置裝備擺設的情形下。

  12. 應用電池支撐的高速緩存RAID掌握器。

  13. 防止應用軟件磁盤陣列。

  14. 斟酌為數據分區應用固態IO卡 (不是磁盤驅動器) – 這些卡可以或許為簡直任何數目的數據支撐2GB/s的寫入速度。

  15. 在Linux中設置swappiness的值為0 – 在數據庫辦事器中沒有來由緩存文件,這是一個辦事器或台式機的優勢。

  16. 假如可以的話,應用 noatime 和 nodirtime掛載文件體系 – 沒有來由更新拜訪數據庫文件的修正時光。

  17. 應用 XFS 文件體系 – 一種比ext3更快、更小的文件體系,而且有很多日記選項, 並且ext3 已被證明與MySQL有雙緩沖成績。

  18. 調劑 XFS 文件體系日記懈弛沖變量 – 為了最高機能尺度。

  19. 在 Linux 體系中, 應用 NOOP 或許 DEADLINE IO 准時調劑法式 – 同 NOOP 和 DEADLINE准時調劑法式比擬,這個 CFQ 和 ANTICIPATORY 准時調劑法式 顯得異常慢。

  20. 應用64位的操作體系 – 關於MySQL,會有更年夜的內存支撐和應用。

  21. 刪除辦事器上未應用的裝置包和守護過程– 更少的資本占用。

  22. 把應用MySQL的host和你的MySQL host放到一個hosts文件中 – 沒有DNS查找。

  23. 切勿強迫殺逝世一個MySQL過程 – 你會破壞數據庫和正在運轉備份的法式。

  24. 把辦事器進獻給MySQL – 後台過程和其他辦事可以或許延長數據庫占用CPU的時光。

  MySQL 設置裝備擺設:

  25. 當寫入時,應用 innodb_flush_method=O_DIRECT 來防止雙緩沖。

  26. 防止應用 O_DIRECT 和 EXT3 文件體系 – 你將序列化一切要寫入的。

  27. 分派足夠的 innodb_buffer_pool_size 來加載全部 InnoDB 文件到內存中– 少從磁盤中讀取。

  28. 不要將 innodb_log_file_size 參數設置太年夜, 如許可以更快同時有更多的磁盤空間 – 丟失落多的日記平日是好的,在數據庫瓦解後可以下降恢單數據庫的時光。

  29. 不要混用 innodb_thread_concurrency 和 thread_concurrency 參數– 這2個值是不兼容的。

  30. 分派一個極小的數目給 max_connections 參數 – 太多的銜接會用盡RAM並鎖定MySQL辦事。

  31. 堅持 thread_cache 在一個絕對較高的數字,年夜約 16 – 避免翻開銜接時遲緩。

  32. 應用skip-name-resolve參數 – 去失落 DNS 查找。

  33.假如你的查詢都是反復的,而且數據不經常產生變更,那末可使用查詢緩存。然則假如你的數據常常產生變更,那末應用查詢緩存會讓你覺得掉望。\

  34.增年夜temp_table_size值,以避免寫入磁盤

  35.增年夜max_heap_table_size值,以避免寫入磁盤

  36.不要把sort_buffer_size值設置的太高,不然的話你的內存將會很快耗盡

  37.依據key_read_requests和key_reads值來決議key_buffer的年夜小,普通情形下key_read_requests應當比key_reads值高,不然你不克不及高效的應用key_buffer

  38.將innodb_flush_log_at_trx_commit設置為0將會進步機能,然則假如你要堅持默許值(1)的話,那末你就要確保數據的完全性,同時你也要確保復制不會滯後。

  39.你要有一個測試情況,來測試你的設置裝備擺設,而且在不影響正常臨盆的情形下,可以經常停止重啟。

  MySQL形式優化:

  40. 堅持你的數據庫整頓性。

  41. 舊數據歸檔 - 刪除過剩的行前往或搜刮查詢。

  42. 將您的數據加上索引.

  43. 不要過度應用索引,比擬與查詢.

  44. 緊縮文字和BLOB數據類型 - 以節儉空間和削減磁盤讀取次數.

  45. UTF 8和UTF16都低於latin1履行效力.

  46. 有控制地應用觸發器.

  47. 冗余數據堅持到最低限制 - 不反復不用要的數據.

  48. 應用鏈接表,而不是擴大行.

  49. 留意數據類型,在您的真實數據中,盡量應用最小的一個.

  50. 假如其他數據常常被用於查詢時,而BLOB / TEXT數據不是,就把BLOB / TEXT數據從其他數據分別出來.

  51.檢討和常常優化表.

  52. 常常重寫InnoDB表優化.

  53. 有時,當添加列時刪除索引,然後在添加回來索引,如許就會更快.

  54. 針對分歧的需求,應用分歧的存儲引擎.

  55. 應用歸檔存儲引擎日記表或審計表-這是更有用地寫道.

  56.會話數據存儲在緩存(memcache)的而不是MySQL中 - 緩存許可主動主動填值的,並阻攔您創立難以讀取和寫入到MySQL的時空數據.

  57.存儲可變長度的字符串時應用VARCHAR而不是CHAR - 節儉空間,由於固定長度的CHAR,而VARCHAR長度不固定(UTF8不受此影響).

  58. 慢慢停止形式的變更 - 一個小的變更,可以有偉大的影響.

  59.在開辟情況中測試一切形式,反應臨盆變更.

  60.不要隨便更改你的設置裝備擺設文件中的值,它可以發生災害性的影響.

  61.有時刻,在MySQL的configs少等於多.

  62.有疑問時應用一個通用的MySQL設置裝備擺設文件.

  查詢優化:

  63. 應用慢查詢日記去發明慢查詢。

  64. 應用履行籌劃去斷定查詢能否正常運轉。

  65. 老是去測試你的查詢看看能否他們運轉在最好狀況下 –一朝一夕機能總會變更。

  66. 防止在全部表上應用count(*),它能夠鎖住整張表。

  67. 使查詢堅持分歧以便後續類似的查詢可使用查詢緩存。

  68. 在恰當的情況下應用GROUP BY而不是DISTINCT。

  69. 在WHERE, GROUP BY和ORDER BY子句中應用有索引的列。

  70. 堅持索引簡略,不在多個索引中包括統一個列。

  71. 有時刻MySQL會應用毛病的索引,關於這類情形應用USE INDEX。

  72. 檢討應用SQL_MODE=STRICT的成績。

  73. 關於記載數小於5的索引字段,在UNION的時刻應用LIMIT不是是用OR.

  74. 為了 防止在更新前SELECT,應用INSERT ON DUPLICATE KEY或許INSERT IGNORE ,不要用UPDATE去完成。

  75. 不要應用 MAX,應用索引字段和ORDER BY子句。

  76. 防止應用ORDER BY RAND().

  77。LIMIT M,N現實上可以減緩查詢在某些情形下,有控制地應用。

  78。在WHERE子句中應用UNION取代子查詢。

  79。關於UPDATES(更新),應用 SHARE MODE(同享形式),以避免獨有鎖。

  80。在從新啟動的MySQL,記得來暖和你的數據庫,以確保您的數據在內存和查詢速度快。

  81。應用DROP TABLE,CREATE TABLE DELETE FROM從表中刪除一切數據。

  82。最小化的數據在查詢你須要的數據,應用*消費年夜量的時光。

  83。斟酌耐久銜接,而不是多個銜接,以削減開支。

  84。基准查詢,包含應用辦事器上的負載,有時一個簡略的查詢可以影響其他查詢。

  85。當負載增長您的辦事器上,應用SHOW PROCESSLIST檢查慢的和有成績的查詢。

  86。在開辟情況中發生的鏡像數據中 測試的一切可疑的查詢。

  MySQL 備份進程:

  87. 從二級復禮服務器長進行備份。

  88. 在停止備份時代停滯復制,以免在數據依附和外鍵束縛上湧現紛歧致。

  89. 完全停滯MySQL,從數據庫文件停止備份。

  90. 假如應用 MySQL dump停止備份,請同時備份二進制日記文件– 確保復制沒有中止。

  91. 不要信賴LVM 快照 – 這極可能發生數據紛歧致,未來會給你帶來費事。

  92. 為了更輕易停止單表恢復,以表為單元導出數據 – 假如數據是與其他表隔離的。

  93. 當應用mysqldump時請應用 –opt。

  94. 在備份之前檢討和優化表。

  95. 為了更快的停止導入,在導入時暫時禁用外鍵束縛。

  96. 為了更快的停止導入,在導入時暫時禁用獨一性檢測。

  97. 在每次備份後盤算數據庫,表和索引的尺寸,以便更夠監控數據尺寸的增加。

  98. 經由過程主動調劑劇本監控復制實例的毛病和延遲。

  99. 按期履行備份。

  100. 按期測試你的備份。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved