MySQL資料庫優化方法詳解

2021-09-29 09:49:54 字數 2407 閱讀 5677

一、硬體的優化

1.1 cpu優化(64位cpu,建議多核繫結不同的服務)

1.2 記憶體(按照企業發展,合理調控記憶體)

1.3 硬碟 (數量越多越好,效能:ssd(核心高併發業務) > sas(線上普通業務)> sata(線下))

raid 4 4塊盤 效能: raid0 > raid10 > raid5 > raid1

1.4 網絡卡 (網絡卡的ffer,通過引數可以核心調優,多塊網絡卡bond)

二、軟體的優化

2.1 作業系統:x86_64位系統

2.2 建議編譯安裝,編譯優化(一般安裝有三種方式:yum安裝,二進位制安裝,編譯安裝)

三、my.cnf引數的優化

my.cnf引數優化的幅度很小,大部分在架構和sql語句的調優

3.1 innodb_buffer_pool_size = 2048m #資料庫的資料會快取在這個buffer_pool裡面,一般設定值為物理記憶體的1/3,不超過50%

3.2 innodb_flush_log_at_trx_commit = 2 #修改引數提交不需要重新整理binlog

3.3 sort_buffer_size = 2m #這些都是執行緒buffer,這裡的值不能給大

3.4 join_buffer_size = 2m

3.5 open_file_limit = 10240 這裡的值可以給大

3.6 query_cache_size = 64m

3.7 query_cache_limit = 4m 這裡的值不能給大,建議前端做memcached快取,不要在資料庫裡做查詢快取。

3.8 query_cache_min_res_unit = 2k

3.9 tmp_table_size = 256m #可以稍微給大點,但是不要給太大,會占用磁碟空間

3.10 tmp_heap_table_size= 256m

3.11 long_query_time = 2 超過兩秒的查詢記錄下來

3.12 log_slow_queries = /data/mysql/slowlog.log

3.13 log_error = /data/mysql/error.log 記錄錯誤日誌

3.13 expire_logs_days = 7 自動清理binlog,不要手動清理

3.14 key_buffer_size = 2048m 索引的快取,主要用於myisam引擎,索引的資料儲存在這裡,如果是myisam引擎,建議值盡量大些

3.15 skip-name-resolve 這個需要在配置檔案裡面新增,不加容易導致使用者許可權問題,show processlist會出現大量login等待

3.16 innodb_data_file_path = iddata1:1024m:autoextend

小結:1、生產引數是一般情況下的引數,通過命令監控慢慢調整:show global status\g

2、mysql效能調優工具mysqlreport

四、sql語句的優化

2.1 索引優化

抓出慢sql,配置my.cnf

long_query_time=2

log_slow_queries=/data/mysql/slowlog.log

按天輪詢:slowlog.log

慢查詢日誌分析工具

mysqldumpslow,mysqlsla,myprofi,mysql-explain-slow-log,mysqllogfilter比較

3)每天晚上0點定時分析慢查詢

2.2 大量複雜的sql語句拆分成多個小的sql語句

2.3 資料庫時儲存資料的地方,不是計算資料的地方,對資料計算的應用類處理,都要拿到前端應用解決。

2.4 索引的功能,一般不要用mysql資料庫,用單獨的工具,像like %餐巾紙%,這樣的語句沒有辦法做索引

五、架構的優化

3.1 業務拆分:搜尋功能,像like %餐巾紙%,一般不要用mysql資料庫

3.2 資料庫前端必須加cache,例如:memcached,使用者登入,商品查詢

3.3 某些業務應用使用nosql持久化快取,例如:redis,memcachedb,ttsserver,例如:粉絲,好友關係等

3.5 資料庫集群與讀寫分離。一主多從,雙主多從,通過程式或dbproxy進行集群讀寫分離。

3.6 單錶超過2000萬,拆庫拆表。人工拆表拆庫(登入、商品、訂單)

六、流程、制度、安全的優化

4.1 任何一次認為資料記錄的更新都要走乙個流程:開發–核心開發–運維或dba

4.2 測試流程:內網測試–idc測試–dba測試–線上執行(比如刪除乙個表的記錄)

4.3 客戶端的管理,phpmyadmin

MySQL 資料庫優化 詳解

優化 字符集設定 永久配置 設定資料庫最大訪問鏈結是 innodb 資料和索引的記憶體緩衝區 檢視引擎 mysql show engines mysql show variables like storage engine mysql show create table t1 檢視建表資訊mysql...

MySQL 資料庫效能優化方法

1 選取最適用的字段屬性 mysql可以很好的支援大資料量的訪問,但是一般說來,另外乙個提高效率的方法是在可能的情況下,應該 盡量把字段設定為 not null 這樣在將來執行查詢的時候,資料庫不用去比較 null值。對於某些文字字段,例如 省份 或者 性別 我們可以將它們定義為enum型別。因為在...

優化MYSQL資料庫的方法

1 資料庫設計方面,這是dba和architect的責任,設計結構良好的資料庫,必要的時候,去正規化 英文是這個 denormalize,中文翻譯成啥我不知道 允許部分資料冗餘,避免join操作,以提高查詢效率 2 系統架構設計方面,表雜湊,把海量資料雜湊到幾個不同的表裡面.快慢表,快表只留最新資料...