1. 程式人生 > >mysql服務效能優化—my.cnf配置說明詳解(16G記憶體)

mysql服務效能優化—my.cnf配置說明詳解(16G記憶體)

此配置是老男孩生產線上使用的配置,在培訓的時候,他給的,我在這裡,對各引數添加了中文說明
這配置已經優化的不錯了,如果你的mysql沒有什麼特殊情況的話,可以直接使用該配置引數


MYSQL伺服器my.cnf配置文件詳解
硬體:記憶體16G

[client]
port = 3306
socket = /data/3306/mysql.sock

[mysql]
no-auto-rehash

[mysqld]
user = mysql
port = 3306
socket = /data/3306/mysql.sock
basedir = /usr/local/mysql
datadir = /data/3306/data
open_file
s_limit    = 10240

back_log = 600   

#在MYSQL暫時停止響應新請求之前,短時間內的多少個請求可以被存在堆疊中。如果系統在短時間內有很多連線,則需要增大該引數的值,該引數值指定到來的TCP/IP連線的監聽佇列的大小。預設值50。

max_connections = 3000   
#MySQL允許最大的程序連線數,如果經常出現Too Many Connections的錯誤提示,則需要增大此值。

max_connect_errors = 6000   
#設定每個主機的連線請求異常中斷的最大次數,當超過該次數,MYSQL伺服器將禁止host的連線請求,直到mysql伺服器重啟或通過flush hosts
命令清空此host的相關資訊。

table_cache = 614  
#指示表調整緩衝區大小。# table_cache 引數設定表快取記憶體的數目。每個連線進來,都會至少開啟一個表快取。#因此, table_cache 的大小應與 max_connections 的設定有關。例如,對於 200 個#並行執行的連線,應該讓表的快取至少有 200 × N ,這裡 N 是應用可以執行的查詢#的一個聯接中表的最大數量。此外,還需要為臨時表和檔案保留一些額外的檔案描述符。
# 當 Mysql 訪問一個表時,如果該表在快取中已經被開啟,則可以直接訪問快取;如果#還沒有被快取,但是在 Mysql 表緩衝區中還有空間,那麼這個表就被開啟並放入表緩#衝區;如果表快取滿了,則會按照一定的規則將當前未用的表釋放,或者臨時擴大表快取來存放,使用表快取的好處是可以更快速地訪問表中的內容。執行 flush tables 會#清空快取的內容。一般來說,可以通過檢視
資料庫執行峰值時間的狀態值 Open_tables #和 Opened_tables ,判斷是否需要增加 table_cache 的值(其中 open_tables 是當#前開啟的表的數量, Opened_tables 則是已經開啟的表的數量)。即如果open_tables接近table_cache的時候,並且Opened_tables這個值在逐步增加,那就要考慮增加這個#值的大小了。還有就是Table_locks_waited比較高的時候,也需要增加table_cache。


external-locking = FALSE  
#使用–skip-external-locking MySQL選項以避免外部鎖定。該選項預設開啟


#設定在網路傳輸中一次訊息傳輸量的最大值。系統預設值 為1MB,最大值是1GB,必須設定1024的倍數。

sort_buffer_size = 2M  
# Sort_Buffer_Size 是一個connection級引數,在每個connection(session)第一次需要使用這個buffer的時候,一次性分配設定的記憶體。
#Sort_Buffer_Size 並不是越大越好,由於是connection級的引數,過大的設定+高併發可能會耗盡系統記憶體資源。例如:500個連線將會消耗 500*sort_buffer_size(8M)=4G記憶體
#Sort_Buffer_Size 超過2KB的時候,就會使用mmap() 而不是 malloc() 來進行記憶體分配,導致效率降低。
#技術導讀 http://blog.webshuo.com/2011/02/16/mysql-sort_buffer_size/
#dev-doc: http://dev.mysql.com/doc/refman/5.5/en/server-parameters.html
#explain select*from table where order limit;出現filesort
#屬重點優化引數

join_buffer_size = 2M   
#用於表間關聯快取的大小,和sort_buffer_size一樣,該引數對應的分配記憶體也是每個連線獨享。

thread_cache_size = 300   
# 伺服器執行緒快取這個值表示可以重新利用儲存在快取中執行緒的數量,當斷開連線時如果快取中還有空間,那麼客戶端的執行緒將被放到快取中,如果執行緒重新被請求,那麼請求將從快取中讀取,如果快取中是空的或者是新的請求,那麼這個執行緒將被重新建立,如果有很多新的執行緒,增加這個值可以改善系統性能.通過比較 Connections 和 Threads_created 狀態的變數,可以看到這個變數的作用。設定規則如下:1GB 記憶體配置為8,2GB配置為16,3GB配置為32,4GB或更高記憶體,可配置更大。

thread_concurrency = 8   
# 設定thread_concurrency的值的正確與否, 對mysql的效能影響很大, 在多個cpu(或多核)的情況下,錯誤設定了thread_concurrency的值, 會導致mysql不能充分利用多cpu(或多核), 出現同一時刻只能一個cpu(或核)在工作的情況。thread_concurrency應設為CPU核數的2倍. 比如有一個雙核的CPU, 那麼thread_concurrency的應該為4; 2個雙核的cpu, thread_concurrency的值應為8
#屬重點優化引數

query_cache_size = 64M   
## 對於使用MySQL的使用者,對於這個變數大家一定不會陌生。前幾年的MyISAM引擎優化中,這個引數也是一個重要的優化引數。但隨著發展,這個引數也爆露出來一些問題。機器的記憶體越來越大,人們也都習慣性的把以前有用的引數分配的值越來越大。這個引數加大後也引發了一系列問題。我們首先分析一下 query_cache_size的工作原理:一個SELECT查詢在DB中工作後,DB會把該語句快取下來,當同樣的一個SQL再次來到DB裡呼叫時,DB在該表沒發生變化的情況下把結果從快取中返回給Client。這裡有一個關建點,就是DB在利用Query_cache工作時,要求該語句涉及的表在這段時間內沒有發生變更。那如果該表在發生變更時,Query_cache裡的資料又怎麼處理呢?首先要把Query_cache和該表相關的語句全部置為失效,然後在寫入更新。那麼如果Query_cache非常大,該表的查詢結構又比較多,查詢語句失效也慢,一個更新或是Insert就會很慢,這樣看到的就是Update或是Insert怎麼這麼慢了。所以在資料庫寫入量或是更新量也比較大的系統,該引數不適合分配過大。而且在高併發,寫入量大的系統,建議把該功能禁掉。
#重點優化引數(主庫 增刪改-MyISAM)

query_cache_limit = 4M    
#指定單個查詢能夠使用的緩衝區大小,預設為1M

query_cache_min_res_unit = 2k  
#預設是4KB,設定值大對大資料查詢有好處,但如果你的查詢都是小資料查詢,就容易造成記憶體碎片和浪費
#查詢快取碎片率 = Qcache_free_blocks / Qcache_total_blocks * 100%
#如果查詢快取碎片率超過20%,可以用FLUSH QUERY CACHE整理快取碎片,或者試試減小query_cache_min_res_unit,如果你的查詢都是小資料量的話。
#查詢快取利用率 = (query_cache_size – Qcache_free_memory) / query_cache_size * 100%
#查詢快取利用率在25%以下的話說明query_cache_size設定的過大,可適當減小;查詢快取利用率在80%以上而且Qcache_lowmem_prunes > 50的話說明query_cache_size可能有點小,要不就是碎片太多。
#查詢快取命中率 = (Qcache_hits – Qcache_inserts) / Qcache_hits * 100%

default-storage-engine = MyISAM
#default_table_type = InnoDB

thread_stack = 192K  

#設定MYSQL每個執行緒的堆疊大小,預設值足夠大,可滿足普通操作。可設定範圍為128K至4GB,預設為192KB。

transaction_isolation = READ-COMMITTED   
# 設定預設的事務隔離級別.可用的級別如下:
# READ-UNCOMMITTED, READ-COMMITTED, REPEATABLE-READ, SERIALIZABLE
# 1.READ UNCOMMITTED-讀未提交2.READ COMMITTE-讀已提交3.REPEATABLE READ -可重複讀4.SERIALIZABLE -序列

tmp_table_size = 256M   
# tmp_table_size 的預設大小是 32M。如果一張臨時表超出該大小,MySQL產生一個 The table tbl_name is full 形式的錯誤,如果你做很多高階 GROUP BY 查詢,增加 tmp_table_size 值。如果超過該值,則會將臨時表寫入磁碟。
max_heap_table_size = 256M
long_query_time = 2
log_long_format
log-slow-queries=/data/3306/slow-log.log
#log-bin = /data/3306/mysql-bin
log-bin
binlog_cache_size = 4M
max_binlog_cache_size = 8M
max_binlog_size = 512M

expire_logs_days = 7
key_buffer_size = 2048M 

#批定用於索引的緩衝區大小,增加它可以得到更好的索引處理效能,對於記憶體在4GB左右的伺服器來說,該引數可設定為256MB或384MB。

read_buffer_size = 1M  
# MySql讀入緩衝區大小。對錶進行順序掃描的請求將分配一個讀入緩衝區,MySql會為它分配一段記憶體緩衝區。read_buffer_size變數控制這一緩衝區的大小。如果對錶的順序掃描請求非常頻繁,並且你認為頻繁掃描進行得太慢,可以通過增加該變數值以及記憶體緩衝區大小提高其效能。和sort_buffer_size一樣,該引數對應的分配記憶體也是每個連線獨享。

read_rnd_buffer_size = 16M   
# MySql的隨機讀(查詢操作)緩衝區大小。當按任意順序讀取行時(例如,按照排序順序),將分配一個隨機讀快取區。進行排序查詢時,MySql會首先掃描一遍該緩衝,以避免磁碟搜尋,提高查詢速度,如果需要排序大量資料,可適當調高該值。但MySql會為每個客戶連線發放該緩衝空間,所以應儘量適當設定該值,以避免記憶體開銷過大。

bulk_insert_buffer_size = 64M   
#批量插入資料快取大小,可以有效提高插入效率,預設為8M

myisam_sort_buffer_size = 128M   
# MyISAM表發生變化時重新排序所需的緩衝

myisam_max_sort_file_size = 10G   
# MySQL重建索引時所允許的最大臨時檔案的大小 (當 REPAIR, ALTER TABLE 或者 LOAD DATA INFILE).
# 如果檔案大小比此值更大,索引會通過鍵值緩衝建立(更慢)

myisam_max_extra_sort_file_size = 10G
myisam_repair_threads = 1   

# 如果一個表擁有超過一個索引, MyISAM 可以通過並行排序使用超過一個執行緒去修復他們.
# 這對於擁有多個CPU以及大量記憶體情況的使用者,是一個很好的選擇.

myisam_recover   
#自動檢查和修復沒有適當關閉的 MyISAM 表
skip-name-resolve
lower_case_table_names = 1

server-id = 1


innodb_additional_mem_pool_size = 16M   
#這個引數用來設定 InnoDB 儲存的資料目錄資訊和其它內部資料結構的記憶體池大小,類似於Oracle的library cache。這不是一個強制引數,可以被突破。

innodb_buffer_pool_size = 2048M   
# 這對Innodb表來說非常重要。Innodb相比MyISAM表對緩衝更為敏感。MyISAM可以在預設的 key_buffer_size 設定下執行的可以,然而Innodb在預設的 innodb_buffer_pool_size 設定下卻跟蝸牛似的。由於Innodb把資料和索引都快取起來,無需留給作業系統太多的記憶體,因此如果只需要用Innodb的話則可以設定它高達 70-80% 的可用記憶體。一些應用於 key_buffer 的規則有 — 如果你的資料量不大,並且不會暴增,那麼無需把 innodb_buffer_pool_size 設定的太大了

innodb_data_file_path = ibdata1:1024M:autoextend   
#表空間檔案 重要資料

innodb_file_io_threads = 4   
#檔案IO的執行緒數,一般為 4,但是在 Windows 下,可以設定得較大。

innodb_thread_concurrency = 8 
#伺服器有幾個CPU就設定為幾,建議用預設設定,一般為8.

innodb_flush_log_at_trx_commit = 2   
# 如果將此引數設定為1,將在每次提交事務後將日誌寫入磁碟。為提供效能,可以設定為0或2,但要承擔在發生故障時丟失資料的風險。設定為0表示事務日誌寫入日誌檔案,而日誌檔案每秒重新整理到磁碟一次。設定為2表示事務日誌將在提交時寫入日誌,但日誌檔案每次重新整理到磁碟一次。

innodb_log_buffer_size = 16M  
#此引數確定些日誌檔案所用的記憶體大小,以M為單位。緩衝區更大能提高效能,但意外的故障將會丟失資料.MySQL開發人員建議設定為1-8M之間

innodb_log_file_size = 128M   
#此引數確定資料日誌檔案的大小,以M為單位,更大的設定可以提高效能,但也會增加恢復故障資料庫所需的時間

innodb_log_files_in_group = 3   
#為提高效能,MySQL可以以迴圈方式將日誌檔案寫到多個檔案。推薦設定為3M

innodb_max_dirty_pages_pct = 90   
#推薦閱讀 http://www.taobaodba.com/html/221_innodb_max_dirty_pages_pct_checkpoint.html
# Buffer_Pool中Dirty_Page所佔的數量,直接影響InnoDB的關閉時間。引數innodb_max_dirty_pages_pct 可以直接控制了Dirty_Page在Buffer_Pool中所佔的比率,而且幸運的是innodb_max_dirty_pages_pct是可以動態改變的。所以,在關閉InnoDB之前先將innodb_max_dirty_pages_pct調小,強制資料塊Flush一段時間,則能夠大大縮短 MySQL關閉的時間。

innodb_lock_wait_timeout = 120   
# InnoDB 有其內建的死鎖檢測機制,能導致未完成的事務回滾。但是,如果結合InnoDB使用MyISAM的lock tables 語句或第三方事務引擎,則InnoDB無法識別死鎖。為消除這種可能性,可以將innodb_lock_wait_timeout設定為一個整數值,指示 MySQL在允許其他事務修改那些最終受事務回滾的資料之前要等待多長時間(秒數)

innodb_file_per_table = 0   
#獨享表空間(關閉)

[mysqldump]
quick
max_allowed_packet = 32M

[mysqld_safe]
log-error=/data/3306/mysql_oldboy.err
pid-file=/data/3306/mysqld.pid




#補充
#wait_timeout = 10   
#指定一個請求的最大連線時間,對於4GB左右的記憶體伺服器來說,可以將其設定為5-10。
#skip_networking   

#開啟該選可以徹底關閉MYSQL的TCP/IP連線方式,如果WEB服務器是以遠端連線的方式訪問MYSQL資料庫伺服器的,則不要開啟該選項,否則將無法正常連線。

#log-queries-not-using-indexes
將沒有使用索引的查詢也記錄下來

相關推薦

mysql服務效能優化my.cnf配置說明16G記憶體

此配置是老男孩生產線上使用的配置,在培訓的時候,他給的,我在這裡,對各引數添加了中文說明這配置已經優化的不錯了,如果你的mysql沒有什麼特殊情況的話,可以直接使用該配置引數MYSQL伺服器my.cnf配置文件詳解硬體:記憶體16G[client] port = 3306

mysql服務效能優化my.cnf_my.ini配置說明(伺服器16G記憶體)

此配置是生產線上使用的配置,對各引數添加了中文說明 這配置已經優化的不錯了,如果你的mysql沒有什麼特殊情況的話,可以直接使用該配置引數 MYSQL伺服器my.cnf配置文件詳解 硬體:記憶體16G [client] port = 3306 socket = /

my.cnf 配置檔案

Mysql 作為最常用的資料庫軟體,對於關係型資料庫來說無疑是比較優秀的,隨著版本的 不斷更新,其功能也在增長。my.cnf 作為 mysql 的核心配置檔案,很有必要知道一下。 [[email protected] ~]# mysql --version mysql Ver

Android安全/開發基礎--15--應用程式配置檔案AndroidManifest.xml

================================================================= Android應用程式都需要有清單檔案。該檔案必須命名為AndroidManifest.xml且必須防止在應用程式根目錄中。它聲明

【Qt】Qt5.8交叉編譯配置選項./configure --help

Usage:  configure [options] [assignments]Configure understands variable assignments like VAR=value on the command line.These override any

spring配置檔案applicationContext.xml

上次在開發時遇到建立的新路徑下的model類在部署時不能與資料庫表對映的問題,找到原因是在applicationContext.xml檔案中沒有新增我新建立的路徑,所以spring找不到我的model類,也就無法完成部署。 這裡說一下applicationCo

mysql 5.7之my.cnf配置大全

[client] port = 3306 socket = /tmp/mysql.sock [mysqld] ##

win10下MYSQL的下載、安裝以及配置教程

下載MYSQL  官網下載MYSQL5.7.21版本,連結地址https://www.mysql.com/downloads/。下載流程圖如下:    進入官網點選Community,下載社群版。    找到MYSQL Community Server,點選下方DOW

nignx服務配置檔案2

nginx是一個功能非常強大的web伺服器加反向代理伺服器,同時又是郵件伺服器等等,在專案使用中,使用最多的三個核心功能是反向代理、負載均衡和靜態伺服器。這三個不同的功能的使用,都跟nginx的配置密切相關,nginx伺服器的配置資訊主要集中在nginx.conf這個配置檔案中,並且所有的可

nignx服務配置檔案1

Nginx的配置檔案nginx.conf配置詳解如下: user nginx nginx ; Nginx使用者及組:使用者 組;window下不指定 worker_processes 8; 工作程序:數目。根據硬體調整,通常等於CPU數量或者2倍於CPU。 erro

win10下MYSQL的下載、安裝以及配置教程~~小白入

下載MYSQL 官網下載MYSQL5.7.21版本,連結地址https://www.mysql.com/downloads/。下載流程圖如下: 進入官網點選Community,下載社群版。 找到MYSQL Community Server,點選下方

Spark效能優化之道——解決Spark資料傾斜Data Skew的N種姿勢

摘要 本文結合例項詳細闡明瞭Spark資料傾斜的幾種場景以及對應的解決方案,包括避免資料來源傾斜,調整並行度,使用自定義Partitioner,使用Map側Join代替Reduce側Join,給傾斜Key加上隨機字首等。 為何要處理資料傾斜(Da

Redis集群之配置文件待完善

enable ice local ise bare config 停止 databases end 運維Redis集群的核心任務就是配置文件Redis.conf 命令行將現使用的Redis配置參數導出到 redis.conf.bak文件 grep ‘^[^#]‘ /etc

MySQL之數據表的查詢SELECT語法

clas reg 3.2 查詢語句 我們 lin where 過濾 情況 上一篇講了比較簡單的單表查詢以及MySQL的組函數,這一篇給大家分享一點比較難得知識了,關於多表查詢,子查詢,左連接,外連接等等。希望大家能都得到幫助! 在開始之前因為要多表查詢,所以搭建好環境:

Spartan6芯片配置模式

roc gen bit png 寬度 con 讀取配置 3.2 多個 1. 配置概述  Spartan6系列FPGA通過把應用程序數據導入芯片內部存儲器完成芯片的配置。Spart-6 FPGA可以自己從外部非易失性存儲器導入編程數據,或者通過外界的微處理器、DSP等對其進行

三大框架ssh學習——配置檔案一)

配置檔案詳解 指定web應用預設字符集 <constant name="struts.i18n.encoding" value="gbk" /> 此配置相當於: request.setCharacterEncoding(“gbk”); r

三大框架ssh學習——配置檔案

多配置檔案實現 專案經常需要多人協作開發,但是如果大家都是用同一個struts.xml檔案,會互相影響不利於開發的正常開展。這樣,我們可以通過<include>元素指定多個配置檔案。 可以在src下面建立多個struts配置檔案。然後再struts.xml中分別引入: str

CentOS 7.5安裝配置Tomcat

二、Tomcat調優、開機自啟和日誌切割 1、  編譯安裝openssl、apr、apr-util和tomcat-native: (1)編譯安裝openssl(下載地址https://www.openssl.org/source/): # yum -y install openssl-de

CentOS 7.5安裝配置Tomcat

Tomcat是Apache軟體基金會Jakarta專案中的一個核心專案,主要實現了Java EE中的Servlet、JSP規範,同時也提供HTTP服務,是主流的、免費開源的Java Web輕量級應用伺服器。 一、安裝Tomcat: 1、  安裝JDK(下載地址https://www.orac