資料庫MySQL調優實戰經驗總結

来源:http://www.cnblogs.com/liwei0526vip/archive/2017/02/17/6409218.html
-Advertisement-
Play Games

MySQL 資料庫的使用是非常的廣泛,穩定性和安全性也非常好,經歷了無數大小公司的驗證。僅能夠安裝使用是遠遠不夠的,MySQL 在使用中需要進行不斷的調整參數或優化設置,才能夠發揮 MySQL 的最大作用。下邊的內容是我在工作中經驗的總結,也作為自己的工作筆記,如果能夠幫助到有需要的同志就更好了。M ...


MySQL 資料庫的使用是非常的廣泛,穩定性和安全性也非常好,經歷了無數大小公司的驗證。僅能夠安裝使用是遠遠不夠的,MySQL 在使用中需要進行不斷的調整參數或優化設置,才能夠發揮 MySQL 的最大作用。下邊的內容是我在工作中經驗的總結,也作為自己的工作筆記,如果能夠幫助到有需要的同志就更好了。MySQL 的優化可以從個方面來做:

一、架構層面

1、做主從複製。
2、實現讀寫分離。

二、系統層面

1、增加記憶體。
2、硬碟使用固態硬碟 SSD。
3、給磁碟做 raid0 或者 raid5 以增加磁碟的讀寫速度。
4、可以重新掛載磁碟,並加上 noatime 參數,這樣可以減少磁碟的 I/O。

三、MySQL本身的優化

1、如果未配置主從同步,可以把 bin-log 功能關閉,減少磁碟 I/O。
2、在 my.cnf 中加上 skip-name-resolve ,這樣可以避免由於解析主機名延遲造成 M有SQL 執行慢。
3、調整幾個關鍵的 buffer 和 cache。調整的依據,主要根據資料庫的狀態來調試。如何調優可以參考
4、根據具體的使用場景,選擇合適的存儲引擎。

四、應用層次

查看慢查詢日誌,根據慢查詢日誌優化程式中的 SQL 語句,比如增加索引

五、調整關鍵的buffer和cache

1、key_buffer_size

首先可以根據系統的記憶體大小設定它,大概的一個參考值:1G以下記憶體設定 128M;2G/256M; 4G/384M; 8G/1024M;16G/2048M。這個值可以通過檢查狀態值 Key_read_requests 和 Key_reads,可以知道 key_buffer_size 設置是否合理。比例 key_reads / key_read_requests 應該儘可能的低,至少是 1:100,1:1000更好(上述狀態值可以使用 SHOW STATUS LIKE 'key_read%' 獲得)。註意:該參數值設置的過大反而會是伺服器整體效率降低!

2、table_open_cache

打開一個表的時候,會臨時把表裡面的數據放到這部分記憶體中,一般設置成 1024 就夠了,它的大小我們可以通過這樣的方法來衡量: 如果你發現 open_tables 等於 table_cache,並且 opened_tables 在不斷增長,那麼你就需要增加 table_cache 的值了(上述狀態值可以使用 SHOW STATUS LIKE 'Open%tables' 獲得)。註意,不能盲目地把 table_cache 設置成很大的值。如果設置得太高,可能會造成文件描述符不足,從而造成性能不穩定或者連接失敗。

3、sort_buffer_size

查詢排序時所能使用的緩衝區大小,該參數對應的分配記憶體是每連接獨占! 如果有 100 個連接,那麼實際分配的總共排序緩衝區大小為100 × 4 = 400MB。所以,對於記憶體在 4GB 左右的伺服器推薦設置為:4-8M。

4、read_buffer_size

讀查詢操作所能使用的緩衝區大小。和 sort_buffer_size 一樣,該參數對應的分配記憶體也是每連接獨享!

5、join_buffer_size

聯合查詢操作所能使用的緩衝區大小,和 sort_buffer_size 一樣,該參數對應的分配記憶體也是每連接獨享!

6、myisam_sort_buffer_size

這個緩衝區主要用於修複表過程中排序索引使用的記憶體或者是建立索引時排序索引用到的記憶體大小,一般 4G 記憶體給 64M 即可。

7、query_cache_size

MySQL查詢操作緩衝區的大小,通過以下做法調整:SHOW STATUS LIKE ‘Qcache%’; 如果Qcache_lowmem_prunes該參數記錄有多少條查詢因為記憶體不足而被移除出查詢緩存。通過這個值,用戶可以適當的調整緩存大小。如果該值非常大,則表明經常出現緩衝不夠的情況,需要增加緩存大小Qcache_free_memory:查詢緩存的記憶體大小,通過這個參數可以很清晰的知道當前系統的查詢記憶體是否夠用,是多了,還是不夠用,我們可以根據實際情況做出調整。一般情況下 4G 記憶體設置 64M 足夠了。

8、thread_cache_size

表示可以重新利用保存在緩存中線程的數,參考如下值:1G  —> 8; 2G  —> 16; 3G  —> 32; 3G  —> 64
除此之外,還有幾個比較關鍵的參數

9、thread_concurrency

這個值設置為 CPU 核數的2倍即可。

10、wait_timeout

表示空閑的連接超時時間,預設是:28800s,這個參數是和 interactive_timeout 一起使用的,也就是說要想讓 wait_timeout 生效,必須同時設置 interactive_timeout,建議他們兩個都設置為10。

11、max_connect_errors

是一個 MySQL 中與安全有關的計數器值,它負責阻止過多嘗試失敗的客戶端以防止暴力破解密碼的情況。與性能並無太大關係。為了避免一些錯誤我們一般都設置比較大,比如說10000。

12、max_connections

最大的連接數,根據業務請求量適當調整,設置 500 足夠。

13、max_user_connections

是指同一個賬號能夠同時連接到 mysql 服務的最大連接數。設置為 0 表示不限制。通常我們設置為 100 足夠。

----- 待更新 -----

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 本文屬於《InfluxDB系列教程》文章系列,該系列共包括以下 16 部分: 系列詳情請看:《InfluxDB系列教程》 最近有很多朋友咨詢在新安裝了InfluxDB後,web頁面無法訪問,在此說下原因和解決方案。 一、問題原因 InfluxDB在0.13版本以後,就預設關閉了web管理頁面,而國內 ...
  • 前面很多篇不管CPU、記憶體、磁碟、語句等等等都提到了索引的重要,我想剛剛開始學資料庫的在校學生都知道索引對語句性能的重要性。但他們可能不知道,對語句的重要性就是對系統的重要性! 開篇小測驗 開篇小測驗 下麵這樣一個小SQL 你該怎麼樣添加最優索引 你是否一眼就能看出來呢? 答案將在文章中逐步揭曉~~ ...
  • 又自學,把SQL的一些常用語句複習了一遍。 整理如下: 1增 1.1【插入單行】insert [into] <表名> (列名) values (列值)例:insert into Strdents (姓名,性別,出生日期) values ('開心朋朋','男','1980/6/15') 1.2【將現有 ...
  • 在電腦上下載並安裝UltraISO軟體,如百度雲:http://pan.baidu.com/s/1hrGtvEG 打開UltraISO軟體,找到CentOS.iso的映像文件,點擊<啟用>,選擇<寫入硬碟映像...> 硬碟驅動器,選擇U盤,勾選<刻錄校驗>,確保數據完整寫到了U盤上去; 接下來選擇" ...
  • 本文參考了http://www.cnblogs.com/wangxiaoqiangs/p/6179610.html, 自己操作中收穫一些錯誤心得.記下以備用. 一. 準備工作: 1. 下載nginx並安裝 推薦到nginx官方網站下載並安裝,有很詳細的教程. 參考資料: http://nginx.o ...
  • 在linux上使用vi命令修改或者編輯一個文件內容的時候,最後發現使用<Esc+:+wq!>無法保存退出,卻出現,如下提示: E212: Can't open file for writing Press ENTER or type command to continue 出現這個錯誤的原因可能有兩 ...
  • /:根目錄,根目錄下一般只存放子目錄,不存放文件。在linux系統中所有的文件都掛載該目錄下。 /bin:命令目錄。 存放系統的可執行的二進位文件,如常用的命令ls、tar、mv、cat等。 /boot:存放linux系統啟動時需要的一些文件。 /dev:設備目錄。存放linux系統下的設備文件,訪 ...
  • 我們以centOS為例來說說如何部署node.js環境 一 打開centos,然後開始下載node.js包 二 安裝gcc環境 安裝完成! 三 安裝nodejs的npm,這是一個包程式工具,類似於vs里的nuget! 到現在為止,我們的nodejs環境就算是安裝成功,下麵我們就可以開始node.js ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...