索引mysql
數據庫等待一個頁從磁盤讀取到緩存池的所須要的成本巨大的,不管咱們是想要讀取一個頁面上的多條數據仍是一條數據,都須要消耗約 10ms 左右的時間:sql
SQL優化順序數據庫
配置文件的位置緩存
在哪裏保存你的數據安全
查詢緩存要不要開服務器
寫入頻繁的數據庫,不要開查詢緩存網絡
query_cache_size
Query_cache裏的數據又怎麼處理呢?首先要把Query_cache和該表相關的語句所有置爲失效,而後在寫入更新。那麼若是Query_cache很是大,該表的查詢結構又比較多,查詢語句失效也慢,一個更新或是Insert就會很慢,這樣看到的就是Update或是Insert怎麼這麼慢了。因此在數據庫寫入量或是更新量也比較大的系統,該參數不適合分配過大。並且在高併發,寫入量大的系統,建議把該功能禁掉。
query_cache_limit
指定單個查詢可以使用的緩衝區大小,缺省爲1M
query_cache_min_res_unit
默認是4KB,設置值大對大數據查詢有好處,但若是你的查詢都是小數據查詢,就容易形成內存碎片和浪費併發
其餘緩存怎麼開異步
讀緩存,線程緩存,排序緩存ide
sort_buffer_size = 2M
connection級參數。太大將致使在鏈接數增高時,內存不足。
max_allowed_packet = 32M
網絡傳輸中一次消息傳輸量的最大值。系統默認值 爲1MB,最大值是1GB,必須設置1024的倍數。
join_buffer_size = 2M
和sort_buffer_size同樣,該參數對應的分配內存也是每一個鏈接獨享
tmp_table_size = 256M
默認大小是 32M。GROUP BY 多很少的問題
max_heap_table_size = 256M
key_buffer_size = 2048M
索引的緩衝區大小,對於內存在4GB左右的服務器來講,該參數可設置爲256MB或384MB。
read_buffer_size = 1M
read_rnd_buffer_size = 16M
進行排序查詢時,MySql會首先掃描一遍該緩衝,以免磁盤搜索
bulk_insert_buffer_size = 64M
批量插入數據緩存大小,能夠有效提升插入效率,默認爲8M
Innodb緩存
innodb_buffer_pool_size = 2048M
只須要用Innodb的話則能夠設置它高達 70-80% 的可用內存。一些應用於 key_buffer 的規則有 — 若是你的數據量不大,而且不會暴增,那麼無需把innodb_buffer_pool_size 設置的太大了。
innodb_additional_mem_pool_size = 16M
網絡傳輸中一次消息傳輸量的最大值。系統默認值爲1MB,最大值是1GB,必須設置1024的倍數。
innodb_log_files_in_group = 3
循環方式將日誌文件寫到多個文件。推薦設置爲3
innodb_lock_wait_timeout = 120
InnoDB 有其內置的死鎖檢測機制,能致使未完成的事務回滾。innodb_file_per_table = 0獨享表空間,關閉
鏈接數要多少
open_files_limit = 10240
容許打開的文件數
back_log = 600
短期內的多少個請求能夠被存在堆棧中
max_connections = 3000
MySQL容許最大的進程鏈接數,MySQL默認的最大鏈接數爲100,MySQL服務器容許的最大鏈接數16384
max_connect_errors = 6000
設置每一個主機的鏈接請求異常中斷的最大次數,當超過該次數,MYSQL服務器將禁止host的鏈接請求
thread_cache_size = 300
從新利用保存在緩存中線程的數量
thread_concurrency = 8
thread_concurrency應設爲總CPU核數的2倍
thread_stack = 192K
每一個線程的堆棧大小,默認值足夠大,可知足普通操做。可設置範圍爲128K至4GB,默認爲192KB。
線程池不多配
線程池有關參數
thread_handling
表示線程池模型。
thread_pool_size
表示線程池的group個數,通常設置爲當前CPU核心數目。理想狀況下,一個group一個活躍的工做線程,達到充分利用CPU的目的。
thread_pool_stall_limit
用於timer線程按期檢查group是否「停滯」,參數表示檢測的間隔。
thread_pool_idle_timeout
當一個worker空閒一段時間後會自動退出,保證線程池中的工做線程在知足請求的狀況下,保持比較低的水平。60秒
thread_pool_oversubscribe
該參數用於控制CPU核心上「超頻」的線程數。這個參數設置值不含listen線程計數。
threadpool_high_prio_mode
表示優先隊列的模式。
thread_pool_max_threads
限制線程池最大的線程數,超過將沒法再建立更多的線程,默認爲100000。
thread_pool_high_prio_tickets
最多語序多少次被放入高優先級隊列中,默認爲4294967295。只有在thread_pool_high_prio_mode爲transactions的時候纔有效果
線程處理的最小單位是statement(語句)
線程池實如今server端,經過建立必定數量的線程服務DB請求,相對於one-conection-per-thread的一個線程服務一個鏈接的方式,線程池服務的最小單位是語句,即一個線程能夠對應多個活躍的鏈接。
慢查詢日誌
slow_query_log
是否開啓慢查詢日誌,1表示開啓,0表示關閉。
log-slow-queries
舊版(5.6如下版本)MySQL數據庫慢查詢日誌存儲路徑。能夠不設置該參數,系統則會默認給一個缺省的文件host_name-slow.log
slow-query-log-file
新版(5.6及以上版本)MySQL數據庫慢查詢日誌存儲路徑。能夠不設置該參數,系統則會默認給一個缺省的文件host_name-slow.log
long_query_time
慢查詢閾值,當查詢時間多於設定的閾值時,記錄日誌。
log_queries_not_using_indexes
未使用索引的查詢也被記錄到慢查詢日誌中(可選項)。
log_output
日誌存儲方式。log_output='FILE'表示將日誌存入文件,默認值是'FILE'。log_output='TABLE'表示將日誌存入數據庫,這樣日誌信息就會被寫入到mysql.slow_log表中。MySQL數據庫支持同時兩種日誌存儲方式,配置的時候以逗號隔開便可,如:log_output='FILE,TABLE'。日誌記錄到系統的專用日誌表中,要比記錄到文件耗費更多的系統資源,所以對於須要啓用慢查詢日誌,又須要可以得到更高的系統性能,那麼建議優先記錄到文件。
innotop
安裝:yum install innotop
啓動:innotop -u root -p ‘123’
幫助:?
查詢列表:Q
緩衝區:B
命令統計:C
lepus http://www.lepus.cc/page/product
主從複製配置
log-bin=mysql-bin
[必須]啓用二進制日誌
server-id=222
[必須]服務器惟一ID,默認是1,通常取IP最後一段
binlog-do-db=DB1
binlog-do-db=DB2 #若是備份多個數據庫,重複設置這個選項便可
binlog-do-db=DB3 #須要同步的數據庫,若是沒有本行,即表示同步全部的數據庫
binlog-ignore-db=mysql #被忽略的數據庫
rpl_semi_sync_slave_enabled =1 #啓用半同步複製
rpl_semi_sync_master_timeout=milliseconds
設置此參數值(ms),爲了防止半同步複製在沒有收到確認的狀況下發生堵塞,若是Master在超時以前沒有收到任何確認,將恢復到正常的異步複製,並繼續執行沒有半同步的複製操做。
rpl_semi_sync_master_wait_no_slave={ON|OFF}
若是一個事務被提交,但Master沒有任何Slave的鏈接。默認狀況下,Master會在時間限制範圍內繼續等待Slave的鏈接,並確認該事務已經被正確的寫到磁盤上。可使用此參數選項關閉這種行爲,在這種狀況下,若是沒有Slave鏈接,Master就會恢復到異步複製。
master
GRANT REPLICATION SLAVE ON *.* to 'mysync'@'%' identified by 'q123456'; //通常不用root賬號,“%”表示全部客戶端均可能連,只要賬號,密碼正確,此處可用具體客戶端IP代替,如192.168.145.226,增強安全。
slave
change master to master_host='192.168.145.222',master_user='mysync',master_password='q123456',
master_log_file='mysql-bin.000004',master_log_pos=308;
當有一個Slave失去鏈接後,不影響主庫執行操做的時間,建庫一樣很快;但當全部Slave都關閉後,Master上建庫時產生等待,當等待1s後纔會執行庫建操做;一旦超時,它會自動降級爲異步,再執行不會再產生等待。--此時的客戶端已經不存在了
INSTALL PLUGIN rpl_semi_sync_slave SONAME'semisync_slave.so';
Rpl_semi_sync_master_clients
此狀態變量報告了支持和註冊的半同步複製已鏈接的Slave數量
Rpl_semi_sync_master_status
Master半同步複製的狀態,1是活動狀態,0是非活動狀態--要麼是由於他沒有被啓用,或是由於它已經恢復到異步複製。
Rpl_semi_sync_slave_status
Slave半同步複製的狀態,1是已經被啓用,且IO線程正在運行,0是非活動狀態
MySQL在加載並開啓Semi-sync插件後,每個事務需等待備庫接收日誌後才返回給客戶端。若是作的是小事務,兩臺主機的延遲又較小,則Semi-sync能夠實如今性能很小損失的狀況下的零數據丟失。因此咱們能夠作多個備庫,任何一個備庫接收完成日誌後,主庫就能夠返回給客戶端了。
幾個忠告
一、拓寬知識面(天文,地理,歷史,文化,金融) 二、深刻的瞭解行業知識(IT行業最牛逼的是別人只需學一個專業) 三、邏輯優化一樣是優化(新補充的功能考慮普適性) 四、協做仍是獨行,這是個問題 五、品性的昇華,遠勝於技能的掌握