1. 程式人生 > >MySQL資料庫引數優化

MySQL資料庫引數優化

在MySQL資料庫使用之前,根據實際業務情況,對一些重要的引數進行優化將有利於資料庫的效能的提升及可靠性,首先檢視MySQL的引數配置檔案可以通過mysql --help|grep my.cnf,注意這個命令輸出的配置檔案不只一個,如:/etc/my.cnf /etc/mysql/my.cnf /usr/local/mysql/etc/my.cnf ~/.my.cnf MySQL資料庫啟動之後會到以下路徑下查詢配置檔案,並且以後查詢到的為準,所以一定要保證my.cnf配置檔案只放到一個目錄下。否則可能會找出衝突,導致你配置的引數失效。 MySQL資料庫的引數分為兩種: 動態(dynamic)引數:可以在MySQL例項執行的時候修改並生效;
靜態(static)引數:在整個例項生命週期內不允許修改。 可以使用SET命令對動態引數進行修改,語法如下: SET |[global | session] system_var_name=expr | [@@global. | @@session. | @@] system_var_name=expr 命令中的global和session關鍵字表示這個引數的修改是基於當前會話的還是整個例項的生命週期。有些動態引數只能在會話中進行修改,如autocommit;有些引數修改後會在整個例項生命週期中生效,如:binlog_cache_size。 如果想在資料庫例項下一次啟動的時候引數還是有效的,那麼就必須在my.cnf配置檔案中對引數進行修改。
記憶體配置相關引數 1.sort_buffer_size:排序緩衝區大小,這個引數定義了每個執行緒所使用的排序緩衝區的大小,當查詢請求需要排序時,MySQL伺服器會立即分配給連結這個引數所定義大小的緩衝區的全部記憶體。而不管這個排序是否需要這麼大的記憶體,如果把這個引數設定成100M,那麼10個需要排序查詢的連結就會佔用1G的記憶體,因此這個引數的配置要格外小心,不要將這個引數的值設定的過大。 2.join_buffer_size:這個引數定義的是MySQL的每個執行緒所使用的連線緩衝去的大小,如果查詢中關聯了多張表,那麼MySQL就會為每一個連線分配一個緩衝區,因此這個引數也不要設定的過大。在這裡需要提醒一下,在網際網路環境中,為了提升效能,儘量避免使用連表查詢,尤其是大表的連表查詢。
3.read_buffer_size:這個引數是在MySQL進行全表掃描時所分配的記憶體的大小,這個引數的大小一定要是4K的倍數。 4.read_rnd_buffer_size:索引緩衝區的大小,MySQL只是在需要時分配索引緩衝區,並且只會分配需要的記憶體的大小,不會按照引數設定的大小分配記憶體。 以上四個引數都是為每個執行緒分配的,也就是說,如果有100個執行緒,那麼所使用的記憶體就要×100,所以這些引數的配置值都不能過大,否則就可能找出記憶體浪費甚至溢位。 5.innodb_buffer_pool_size:innodb儲存引擎緩衝池大小,innodb緩衝池中快取的資料頁(預設16K)型別有:索引頁、資料頁、undo頁、插入緩衝(合併多次寫為一次寫)、自適應雜湊索引、鎖資訊、資料字典資訊等。索引innodb儲存引擎的效能嚴重依賴於這個引數,一般情況下,在系統允許的範圍內,這個值應該設定的儘量大一些,計算公式如下: 總記憶體-(每個執行緒所使用的記憶體×連線數)-系統保留記憶體。在MySQL的官方手冊中建議將innodb_buffer_pool_size的大小設定為伺服器記憶體的75%以上,但這要考慮實際情況,必須滿足上面的公式的前提下才可以設定。 從InnoDB1.0.x版本之後,引入了innodb_buffer_pool_instances引數,這個引數允許設定多個緩衝池例項,每個頁根據雜湊值平均分配到不同的緩衝池例項中。這樣做的好處是減少資料庫內部的資源競爭,增加資料庫的併發處理能力。可以通過命令show variables like 'innodb_buffer_pool_instances'\G檢視當前緩衝池例項個數。 IO相關配置引數 innodb是基於事務的儲存引擎,每次資料修改,innodb首先要將事務預寫到事務日誌中,然後再寫入磁碟,而不是每次提交都寫入磁碟,因為磁碟IO的效能比較差。 1.innodb_log_file_size:單個事務日誌大小 2.innodb_log_files_in_group:innodb事務日誌檔案的數量 事務日誌的總大小=innodb_log_files_in_group×innodb_log_file_size,事務日誌是迴圈寫入的方式,如果事務比較繁忙,建議將innodb_log_file_size的值調整大一些,減少檔案交換。事務日誌應能保持資料庫伺服器近1-2個小時內的事務狀況,這樣有利於資料恢復。 3.innodb_log_buffer_size:日誌緩衝區大小,一般32M就足夠用了。 4.innodb_flush_log_at_trx_commit:該引數控制innodb事務日誌的重新整理頻次,有三個值: 0:每秒進行一次log寫入cache,並flush log到磁碟; 1:預設值,在每次事務提交執行log寫入cache,並flush log到磁碟,這種配置最安全,但是效能低; 2:建議使用這個值,每次提交事務,執行log寫入cache,每秒執行一次flush log到磁碟。 5.innodb_flush_method:innodb重新整理的方式,建議使用O_DIRECT,關閉深度快取。 6.innodb_file_per_table:innodb如何使用表空間,如果設定為1,那麼將為每個表建立一個獨立的表空間,這裡強烈建議設定該引數為1。 7.innodb_doublewrite:開啟innodb二次寫,為了增加資料的安全性,該引數也強烈建議設定為1。 安全相關引數 1.expire_logs_days:指定自動清理binlog的天數,建議設定在7天左右。 2.max_allowed_packet:控制MySQL可以接收的資料包的大小,建議改成32M。如果使用了主從複製,那麼這個引數最好保持一致。 3.sysdate_is_now:確保sysdate()返回確定性。 4.read_only:禁止非super許可權的使用者寫許可權,建議在主從複製環境的從資料庫上開啟這個配置,以保證從資料庫不會被誤寫。 5.skip_slave_start:禁止slave自動恢復,建議在主從複製環境的從資料庫上開啟這個配置,以避免從資料庫重啟後自動啟動負責。 其他 1.sync_binlog:控制MySQL如何向磁碟重新整理binlog,主從複製環境,建議將主資料庫設定為1 2.tmp_table_size和max_heap_table_size:控制記憶體臨時表的大小,這兩個值應該設定相同值,而且不要太大。 3.max_connections:最大連線數,預設是100,這個值太小了,建議改成2000及以上。

相關推薦

MySQL資料庫引數優化

在MySQL資料庫使用之前,根據實際業務情況,對一些重要的引數進行優化將有利於資料庫的效能的提升及可靠性,首先檢視MySQL的引數配置檔案可以通過mysql --help|grep my.cnf,注意

MySQL 資料庫效能優化之快取引數優化

https://blog.csdn.net/truelove12358/article/details/51956356   部落格 學院 下載 圖文課 論壇 APP 問答 商城 VIP會員 活動 招聘 ITe

Mysql資料庫效能優化之查詢效能優化

一、前言:為啥查詢速度會變慢? 通常來說,查詢的生命週期大致分為從客戶端、到伺服器,然後在伺服器上進行解析,生成執行計劃,執行,並返回結果給客戶端。其中執行可以說是最重要的階段,這其中包括了大量為了檢索資料到儲存引擎的呼叫以及呼叫後的資料處理,包括排序和分組等。在每一個消耗大量時間的查

MySQL 資料庫效能優化之表結構優化

很多人都將 資料庫設計正規化 作為資料庫表結構設計“聖經”,認為只要按照這個正規化需求設計,就能讓設計出來的表結構足夠優化,既能保證效能優異同時還能滿足擴充套件性要求。殊不知,在N年前被奉為“聖經”的資料庫設計3正規化早就已經不完全適用了。這裡我整理了一些比較常見的資料庫表結構設計方面的優化技巧,希

Mysql 資料庫優化

一. 優化查詢效率 1、儲存引擎選擇:如果資料表需要事務處理,應該考慮使用 InnoDB,因為它完全符合 ACID 特性。 如果不需要事務處理,使用預設儲存引擎 MyISAM 是比較明智的 2、分表分庫,主從。 3、對查詢進行優化,要儘量避免全表掃描,首先應考慮

Mysql資料庫優化(主Sql優化

1. 目標 l 瞭解什麼是優化 l 掌握優化查詢的方法 l 掌握優化資料庫結構的方法 l 掌握優化MySQL伺服器的方法 2. 什麼是優化? l 合理安排資源、調整系統引數使MySQL執行更快、更節省資

MySQL資料庫效能優化(享學課堂聽課筆記)

  1.場景: 2張表A表 200W條資料,關聯表B表3W條資料,AB有主外來鍵關係。 案例1. 35S 使用關聯子查詢,查詢時間35S 案例2. 19S 使用連表查詢 (Left  join ,Inner Join)查詢時間19S 案例3.  9.99S

mysql資料庫簡單優化措施

優化sql的一般步驟 通過show status瞭解各種sql的執行頻率 定位執行效率低的sql語句 通過explain分析效率低的sql 通過show profile分析sql 通過trace分析

阿里雲RDS-MYSQL資料庫引數設定

2016.9.2 最近被資料庫要搞瘋掉了 取消myisam引擎,都換成innodb 總是主備切換,也沒有錯誤日誌 看了看引數設定,很多都不知道 這兩天有時間自己搜尋整理了下 發給大家,有需要的看看 我的伺服器應用主要是WEB網站服務 有一些不懂的地方或者不對的地方,還請大

mysql資料庫效能優化(包括SQL,表結構,索引,快取)

很多人都將 資料庫設計正規化 作為資料庫表結構設計“聖經”,認為只要按照這個正規化需求設計,就能讓設計出來的表結構足夠優化,既能保證效能優異同時還能滿足擴充套件性要求。殊不知,在N年前被奉為“聖經”的資料庫設計3正規化早就已經不完全適用了。這裡我整理了一些比較常見的資料庫表結構設計方面的優化技巧,希望對大家

MySQL資料庫優化方法

1、選取最適用的欄位屬性 MySQL可以很好的支援大資料量的存取,但是一般說來,資料庫中的表越小,在它上面執行的查詢也就會越快。因此,在建立表的時候,為了獲得更好的效能,我們可以將表中欄位的寬度設得儘可能小。(例如:郵編使用char(6)比varchar(255)要好得多) 另外一個提高效率的方法是在可能

mysql資料庫查詢優化-快取

查詢執行的基礎 一.基礎 當希望mysql能夠以更高的效能執行查詢時,最好的辦法就是弄清楚mysql是如何優化和執行查詢的,基本可以從以下3點開始瞭解: 1.客戶端和mysql伺服器的互動過程 (1)客戶端傳送一條查詢給伺服器 (2)伺服器先檢查查詢快取(第二次查詢的SQL和第一次查詢

mysql資料庫查詢優化

總結: 儘可能減少掃表的行數,達到目的 查詢執行的基礎 一.基礎 當希望mysql能夠以更高的效能執行查詢時,最好的辦法就是弄清楚mysql是如何優化和執行查詢的,基本可以從以下3點開始瞭解: 1.客戶端和mysql伺服器的互動過程 (1)客戶端傳送一條查詢給伺服器 (2)伺服器先檢查

一些mysql資料庫效能優化方法

很多人都將 資料庫設計正規化 作為資料庫表結構設計“聖經”,認為只要按照這個正規化需求設計,就能讓設計出來的表結構足夠優化,既能保證效能優異同時還能滿足擴充套件性要求。殊不知,在N年前被奉為“聖經”的資料庫設計3正規化早就已經不完全適用了。這裡我整理了一些比較常見的資料庫表結構設計方面的優化技巧,希望對大

資料庫-面試題-MySQL資料庫優化方法

1、選取最適用的欄位屬性 MySQL可以很好的支援大資料量的存取,但是一般說來,資料庫中的表越小,在它上面執行的查詢也就會越快。因此,在建立表的時候,為了獲得更好的效能,我們可以將表中欄位的寬度設得儘可能小。 例如,在定義郵政編碼這個欄位時,如果將其設定為CHAR(2

MySQL 資料庫效能優化之索引優化

非常感謝作者。 大家都知道索引對於資料訪問的效能有非常關鍵的作用,都知道索引可以提高資料訪問效率。 為什麼索引能提高資料訪問效能?他會不會有“副作用”?是不是索引建立越多,效能就越好?到底該如何設計索引,才能最大限度的發揮其效能? 這篇文章主要是帶著上面這幾個問題來做一個

Mysql資料庫如何優化?從哪幾個方面考慮?

首先應該想到的是:        加快取,想辦法提高快取命中率        加索引,正確加索引(索引型別,原則方面)        硬體上提高資料庫配置(治標不治本的辦法) 具體下面會一一介紹        對Mysql資料庫的優化三個方向主要分為:     1

一些mysql資料庫效能優化方法 (17/2/28整理)

一、MySQL 資料庫效能優化之SQL優化 優化目標 1.減少 IO 次數 IO永遠是資料庫最容易瓶頸的地方,這是由資料庫的職責所決定的,大部分資料庫操作中超過90%的時間都是 IO 操作所佔用的,減少 IO 次數是 SQL 優化中需要第一優先考慮

mysql資料庫配置優化(佔cpu過高問題)

輸出結果顯示了有哪些執行緒在執行,可以幫助識別出有問題的查詢語句 SHOW PROCESSLIST; wait_timeout, 即睡眠連線超時秒數,如果某個連線超時,會被mysql自然終止。 SHOW GLOBAL VARIABLES LIKE 'wait_timeout

MySQL 資料庫效能優化之(三)索引優化

大家都知道索引對於資料訪問的效能有非常關鍵的作用,都知道索引可以提高資料訪問效率。 為什麼索引能提高資料訪問效能?他會不會有“副作用”?是不是索引建立越多,效能就越好?到底該如何設計索引,才能最大限度的發揮其效能? 這篇文章主要是帶著上面這幾個問題來做一個簡要的分析,