小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

mysql_優(yōu)化參數(shù)整理

 印度阿三17 2021-01-11

1. 連接層

max_connections=1000         #*****
最大并發(fā)連接數(shù)

max_connect_errors=999999
當某一客戶端嘗試連接MySQL服務器,但是累計失?。ú还苁裁丛颍┰O置的次數(shù),則MySQL會無條件強制阻止此客戶端連接。

wait_timeout=600             #*****
設置非交互連接(就是指那些連接池方式、非客戶端方式連接的)的超時時間(單位秒,默認是28800,就是8小時),超過這個時間,mysql服務器會主動切斷那些已經(jīng)連接的,但是狀態(tài)是sleep的連接。

interactive_wait_timeout=3600
針對交互式連接。所謂的交互式連接,即在mysql_real_connect()函數(shù)中使用了CLIENT_INTERACTIVE選項。
說得直白一點,通過mysql客戶端連接數(shù)據(jù)庫是交互式連接,通過jdbc連接數(shù)據(jù)庫是非交互式連接。

net_read_timeout  = 120
數(shù)據(jù)讀取超時時間。在終止讀之前,從一個連接獲得數(shù)據(jù)而等待的時間秒數(shù);當服務正在從客戶端讀取數(shù)據(jù)時,net_read_timeout控制何時超時。即客戶端執(zhí)行數(shù)據(jù)讀取,等待多少秒仍未執(zhí)行成功時自動斷開連接。 

net_write_timeout = 120
數(shù)據(jù)庫寫超時時間。和net_read_timeout意義類似,在終止寫之前,等待多少秒把block寫到連接;當服務正在寫數(shù)據(jù)到客戶端時,net_write_timeout控制何時超時。

max_allowed_packet= 32M      #*****
限制server接受的數(shù)據(jù)包大小,最大1G

2.server層

**********************安全更新模式**************************
sql_safe_updates                =1                 # *****
在mysql中,如果在update和delete沒有加上where條件,數(shù)據(jù)將會全部修改。
開啟安全模式后,當沒有加where條件或where條件中列(column)沒有索引可用,則拒絕修改

*************************慢日志****************************
slow_query_log                  =ON
開啟慢日志
slow_query_log_file             =/data/3307/slow.log   # *****
慢日志存儲路徑
long_query_time                 =1                 # *****
運行時間為多長則判定為慢,實際生產(chǎn)中一般設置在0.01~0.1之間(單位秒)
log_queries_not_using_indexes   =ON                 # *****
開啟記錄沒有使用索引的語句
log_throttle_queries_not_using_indexes = 10         # *****
因為沒有使用同樣索引而導致慢的語句只記錄10條

***********************會話級別緩沖區(qū)**************************
**************不可設置過大,高并發(fā)時會占用很多內(nèi)存******************
sort_buffer_size = 1M
系統(tǒng)中對數(shù)據(jù)進行排序的時候用到的Buffer,儲存行指針
join_buffer_size = 1M
系統(tǒng)中對數(shù)據(jù)進行join的時候用到的Buffer
read_buffer= 1M
MySQL讀入緩沖區(qū)大小。對表進行順序掃描的請求所分配的一個讀入緩沖區(qū).
read_rnd_buffer_size            = 1M
儲存排序的數(shù)據(jù),配合sort_buffer使用,MRR優(yōu)化器算法就是在read_rnd_buffer中進行工作的.
tmp_table_  = 16M
max_heap_table_size = 16M
兩個參數(shù)共同影響了sql執(zhí)行時生成臨時數(shù)據(jù)表的大小
max_execution_time              = 10000
用來控制select語句的最大執(zhí)行時間,如果超過這個時間,就終止該查詢。單位是毫秒,可以動態(tài)修改,分為session和global兩種級別,如果設置為0的話,則證明不設限制。

*************************鎖等待****************************
lock_wait_timeout               = 60                 # *****
當其他的SQL語句已經(jīng)持有了鎖,當前SQL語句需要等待持有鎖的SQL語句執(zhí)行完畢釋放鎖之后才能執(zhí)行。當申請的鎖等待時間超過參數(shù)的設定值時,系統(tǒng)會報LOCK_WAIT_TIMEOUT的錯誤。

*************************庫表大小寫敏感****************************
lower_case_table_names          =1                   # *****            
默認0,大小寫敏感。
設置1,大小寫不敏感。創(chuàng)建的表,數(shù)據(jù)庫都是以小寫形式存放在磁盤上,對于sql語句都是轉(zhuǎn)換為小寫對表和DB進行查找。
設置2,創(chuàng)建的表和DB依據(jù)語句上格式存放,凡是查找都是轉(zhuǎn)換為小寫進行。

*************************線程相關****************************
thread_cache_size               =64                  
每建立一個連接,都需要一個線程來與之匹配。
thread_cache_size用來緩存空閑的線程,以至不被銷毀,如果線程緩存中有空閑線程,這時候建立新連接,MYSQL就會很快的響應連接請求。
show global 里關于線程緩存有如下幾個狀態(tài)變量,這里作簡單解釋一下。
Threads_cached :代表當前此時此刻線程緩存中有多少空閑線程。
Threads_connected :代表當前已建立連接的數(shù)量,因為一個連接就需要一個線程,所以也可以看成當前被使用的線程數(shù)。
Threads_created :代表從最近一次服務啟動,已創(chuàng)建線程的數(shù)量。
Threads_running :代表當前激活的(非睡眠狀態(tài))線程數(shù)。并不是代表正在使用的線程數(shù),有時候連接已建立,但是連接處于sleep狀態(tài),這里相對應的線程也是sleep狀態(tài)。
最好將thread_cache_size設置成與threads_connected一樣。不過很少有情況將threads_cache_size設置成比200還大的數(shù)。

log_timestamps                  =SYSTEM              # *****
控制 error log、slow_log、genera log,等等記錄日志的顯示時間參數(shù)
可以被設置的值有:UTC 和 SYSTEM,默認使用 UTC,這樣會使得日志中記錄的時間比中國這邊的慢了8個小時,導致查看日志不方便。它還支持動態(tài)設置,不過建議大家在配置文件中就寫上,以免重啟之后造成不必要的麻煩。

init_connect                    ="set names utf8"    # *****

event_scheduler                 =OFF
mysql中的定時任務

secure-file-priv                =/tmp                # *****
設置文件導出路徑

binlog_expire_logs_seconds      =2592000             # *****
binlog失效日期參數(shù)為 binlog_expire_logs_seconds,單位秒,默認30天過期。

sync_binlog                     =1                   # *****
sync_binlog=0,當事物提交之后,mysql不做fsync之類的刷新binlog_cache中的信息到磁盤,而讓filesystem自行決定什么時候來同步,或者cache滿了之后再同步。
sync_binlog=n,每進行n次事物提交后,mysql將進行一次fsync之類的磁盤同步指令來將binlog_cache中的數(shù)據(jù)強制寫入磁盤。
為了確保安全性,我們可以將sync_binlog設置為1,
為了保證最價性能,我們可以將sync_binlog設置為0,

log-bin                         =/data/3307/mysql-bin
二進制日志路徑及文件名前綴

log-bin-index                   =/data/3307/mysql-bin.index
二進制日志索引文件

max_binlog_size                 =500M
二進制日志達到設定值時滾動生成新日志,flush logs可以手動滾動

binlog_format                   =ROW
二進制日志的格式
STATEMENT模式(SBR)語句模式
每一條會修改數(shù)據(jù)的sql語句會記錄到binlog中。優(yōu)點是并不需要記錄每一條sql語句和每一行的數(shù)據(jù)變化,減少了binlog日志量,節(jié)約IO,提高性能。缺點是在某些情況下會導致master-slave中的數(shù)據(jù)不一致(如sleep()函數(shù), last_insert_id(),以及user-defined functions(udf)等會出現(xiàn)問題)
ROW模式(RBR)
不記錄每條sql語句的上下文信息,僅需記錄哪條數(shù)據(jù)被修改了,修改成什么樣了。而且不會出現(xiàn)某些特定情況下的存儲過程、或function、或trigger的調(diào)用和觸發(fā)無法被正確復制的問題。缺點是會產(chǎn)生大量的日志,尤其是alter table的時候會讓日志暴漲。
③ MIXED模式(MBR)
以上兩種模式的混合使用,一般的復制使用STATEMENT模式保存binlog,對于STATEMENT模式無法復制的操作使用ROW模式保存binlog,MySQL會根據(jù)執(zhí)行的SQL語句選擇日志保存方式。

3.存儲引擎層

transaction-isolation               ="READ-COMMITTED"    # *****
隔離級別設置,隔離效果依次提高,并發(fā)性能依次下降
read-uncommitted:讀未提交,會出現(xiàn)臟讀;
read-committed:讀提交,杜絕臟讀,但不可重復讀;
repeatable-read:可重復讀,不允許臟讀、不可重復讀,但會出現(xiàn)幻讀;
serializable:串行化,以上都不會出現(xiàn)。

innodb_data_home_dir                =/xxx
共享表空間路徑

innodb_log_group_home_dir           =/xxx
日志組的路徑,默認在數(shù)據(jù)目錄下
innodb_log_file_size                =2048M
redo日志的大小
innodb_log_files_in_group           =3
redo日志的數(shù)量

innodb_flush_log_at_trx_commit      =1                   # *****
雙1中的第二個1
0:log buffer將每秒一次地寫入log file中,并且log file的flush(刷到磁盤)操作同時進行。該模式下在事務提交的時候,不會主動觸發(fā)寫入磁盤的操作。
1:每次事務提交時MySQL都會把log buffer的數(shù)據(jù)寫入log file,并且flush(刷到磁盤)中去,該模式為系統(tǒng)默認。
2:每次事務提交時MySQL都會把log buffer的數(shù)據(jù)寫入log file,但是flush(刷到磁盤)操作并不會同時進行。該模式下,MySQL會每秒執(zhí)行一次 flush(刷到磁盤)操作。
innodb_flush_method                 =O_DIRECT            # *****
fdatasync模式(默認):寫數(shù)據(jù)時,write這一步將數(shù)據(jù)文件和redo log 寫入到操作系統(tǒng)緩沖OS buffer中
就會返回完成,真正完成是flush操作,buffer pool 和log buffer把文件和日志交給OS buffer去flush更新到磁盤。
O_DSYNC模式:寫日志操作是在write這步完成,而數(shù)據(jù)文件的寫入是在flush這步通過fsync完成
O_DIRECT模式:數(shù)據(jù)文件的寫入操作是直接從mysql innodb buffer到磁盤的,并不用通過操作系統(tǒng)的
緩沖,而真正的完成也是在flush這步,日志還是要經(jīng)過OS緩沖

在這里插入圖片描述

innodb_io_capacity                  =1000                # *****
控制當刷新臟數(shù)據(jù)時MySQL每秒執(zhí)行的IO量,參數(shù)默認是200,可以動態(tài)調(diào)整.可以設置為設備能達到的最大IOPS的50%

innodb_io_capacity_max              =4000         
在壓力下,控制當刷新臟數(shù)據(jù)時MySQL每秒執(zhí)行的IO量,可以設置為設備能達到的最大IOPS

innodb_buffer_pool_size             =64G                 # *****
InnoDB緩沖池,用于多個目的:
* 數(shù)據(jù)緩存 – 這絕對是它的最重要的目的
* 索引緩存 – 這使用是的同一個緩沖池
* 緩沖 – 更改的數(shù)據(jù)(通常稱為臟數(shù)據(jù))在被刷新到硬盤之前先存放到緩沖
* 存儲內(nèi)部結構 – 一些結構如自適應哈希索引或者行鎖也都存儲在InnoDB緩沖池
如果是單純的數(shù)據(jù)庫服務器,可以將其設置為物理內(nèi)存的80%以下.

innodb_buffer_pool_instances        =4                   # *****
可以開啟多個內(nèi)存緩沖池,把需要緩沖的數(shù)據(jù)hash到不同的緩沖池中.將 buffer pool 分成幾個區(qū),每個
區(qū)用獨立的鎖保護,這樣就減少了訪問 buffer pool 時需要上鎖的粒度,以提高性能。

innodb_log_buffer_size              =64M                 # *****
mysql事務日志文件(ib_logfile0)的大小;
設置的太?。寒斠粋€日志文件寫滿后,innodb會自動切換到另外一個日志文件,而且會觸發(fā)數(shù)據(jù)庫的檢查點
(Checkpoint),這會導致innodb緩存臟頁的小批量刷新,會明顯降低innodb的性能。由于日志切換更頻
繁,也就直接導致更多的BUFFER FLUSH,由于日志切換的時候是不能BUFFER FLUSH的, BUFFER寫不下
去,導致沒有多余的buffer 寫redo, 那么整個MYSQL就HANG住,還有一種情況是如果有一個大的事務,把
所有的日志文件寫滿了,還沒有寫完,這樣就會導致日志不能切換(因為實例恢復還需要,不能被循環(huán)復寫)
這樣mysql就hang住了??梢愿鶕?jù)文件修改時間來判斷日志文件的旋轉(zhuǎn)頻率,旋轉(zhuǎn)頻率太頻繁,說明日志文件太小了。

設置的太大:設置很大以后減少了checkpoint,并且由于redo log是順序I/O,大大提高了I/O性能。但是如果
數(shù)據(jù)庫意外出現(xiàn)了問題,比如意外宕機,那么需要重放日志并且恢復已經(jīng)提交的事務(也就是實例恢復中的前滾, 
利用redo重演變化來恢復buffer cache中的數(shù)據(jù)),如果日志很大,那么將會導致恢復時間很長。甚至到我們
不能接受的程度。

innodb_max_dirty_pages_pct          =85                  # *****
控制buffer pool中臟頁的百分比,當臟頁數(shù)量占比超過這個參數(shù)設置的值時,InnoDB會啟動刷臟頁的操作。默認值為 75

innodb_lock_wait_timeout            =10                  # *****
事務鎖等待超時時間,單位秒

innodb_open_files                   =63000               # *****
指定InnoDB一次可以保持打開的.ibd文件的最大數(shù)目。最小值是10。默認值300。

innodb_page_cleaners                =4
頁面清除程序線程數(shù),如果超過緩沖池實例數(shù),則innodb_page_cleaners將自動設置為與innodb_buffer_pool_instances相同的值

innodb_sort_buffer_size             =64M
在創(chuàng)建InnoDB索引時用于指定對數(shù)據(jù)排序的排序緩沖區(qū)的大小。利用這塊內(nèi)存把數(shù)據(jù)讀進來進行內(nèi)部排序然后寫入磁盤。這個參數(shù)只會在創(chuàng)建索引的過程中被使用,不會用在后面的維護操作;在索引創(chuàng)建完畢后innodb_sort_buffer會被釋放。

innodb_print_all_deadlocks          =1                   #
記錄死鎖日志到error.log

innodb_rollback_on_timeout          =ON
事務超時后回滾整個事務還是上一條語句

innodb_deadlock_detect              =ON
死鎖檢測

4. 主從復制相關

*************************relay_log******************************
relay_log                       =/opt/log/mysql/blog/relay
定義relay_log的位置和名稱,如果值為空,則默認位置在數(shù)據(jù)文件的目錄

relay_log_index                 =/opt/log/mysql/blog/relay.index
定義relay_log的位置和名稱

max_relay_log_size              =500M
標記relay log 允許的最大值,如果該值為0,則為默認值max_binlog_size(1G)

relay_log_recovery              =ON
當slave從庫宕機后,假如relay-log損壞了,導致一部分中繼日志沒有處理,則自動放棄所有未執(zhí)行的relay-log,并且重新從master上獲取日志,這樣就保證了relay-log的完整性。默認情況下該功能是關閉的,將relay_log_recovery的值設置為 1時,可在slave從庫上開啟該功能,建議開啟。

**********************半同步**************************
rpl_semi_sync_master_enabled                =ON
控制是否在主庫上啟用半同步復制,默認值是0(關閉)

rpl_semi_sync_master_timeout                =1000
一個以毫秒為單位的值,用于控制主服務器等待來自從服務器的確認提交并恢復到異步復制的時間,超過這個值就是超時。 默認值是10000(10秒)。超時之后,就從半同步復制,返回到異步復制。

rpl_semi_sync_master_trace_level            =32
日志打印參數(shù),默認即可

rpl_semi_sync_master_wait_for_slave_count   =1
必須等待至少多少個slave的ack信息,才可以提交

rpl_semi_sync_master_wait_no_slave          =ON
在沒有slave時,是否選擇等待

rpl_semi_sync_master_wait_point             =AFTER_SYNC
控制等待ack的邏輯處于整個事務提交過程的哪個階段,目前支持兩種模式
AFTER_SYNC       ##增強半同步
AFTER_COMMIT     ##普通半同步

rpl_semi_sync_slave_enabled                 =ON
slave半同步的開關

rpl_semi_sync_slave_trace_level             =32
salve節(jié)點半同步日志相關

binlog_group_commit_sync_delay              =1
表示binlog提交后等待延遲多少時間再同步到磁盤,默認0,單位微妙,不延遲。設置延遲可以讓多個事務同一時刻提交,提高binlog組提交的并發(fā)數(shù)和效率,提高slave的吞吐量。

binlog_group_commit_sync_no_delay_count     =1000
表示等待延遲提交的最大事務數(shù),如果上面參數(shù)的時間沒到,但事務數(shù)到了,則直接同步到磁盤。若binlog_group_commit_sync_delay沒有開啟,則該參數(shù)也不會開啟。

gtid_mode                       =ON
enforce_gtid_consistency        =ON
skip-slave-start                =1
gtid開關,以上三個參數(shù)同時開啟猜可以

#read_only                      =ON
#super_read_only                =ON
只讀模式,從庫參數(shù),防止從庫誤寫入

log_slave_updates               =ON
1、從庫只開啟log-bin功能,不添加log-slave-updates參數(shù),從庫從主庫復制的數(shù)據(jù)不會寫入log-bin日志文件里。
2、直接向從庫寫入數(shù)據(jù)時,是會寫入log-bin日志的。
3、開啟log-slave-updates參數(shù)后,從庫從主庫復制的數(shù)據(jù)會寫入log-bin日志文件里。這也是該參數(shù)的功能。

server_id                       =2330602

report_host                     =xxxx
向主庫報告從庫的ip
report_port                     =3306
向主庫報告從庫的端口

slave_parallel_type                         =LOGICAL_CLOCK
DATABASE(默認值,基于庫的并行復制方式)
LOGICAL_CLOCK(基于組提交的并行復制方式)

slave_parallel_workers                      =4
并發(fā)sql線程數(shù)量

master_info_repository                      =TABLE
relay_log_info_repository                   =TABLE
多源復制從庫需要開啟的參數(shù)
來源:https://www./content-2-817001.html

    本站是提供個人知識管理的網(wǎng)絡存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多