mysql核心參數_MySQL技術體系之核心參數

本文主要基于MySQL 5.7版本的數據庫環境,總結my.cnf文件中核心參數的配置使用,讓更多的人對MySQL技術體系有更全面、更專業的深度了解。

一、客戶端核心參數

1、port

端口號,默認3306

2、socket

Socket文件地址,默認以.sock為文件名稱后綴,用于UNIX套接字通信。

二、服務端全局區(SGA)緩沖區參數

1、innodb_buffer_pool

InnoDB緩沖池,位于主內存

緩存被訪問過的表數據、索引文件、插入緩沖、數據字典等

推薦大小設置為物理內存的50%-80%

2、innodb_buffer_pool_instance

將緩沖池進一步劃分為互相隔離的內存區域,更好的支持并發讀寫,減少內存爭用現象

默認值為1

僅當innodb_buffer_pool參數配置大于1024MB有效

通過命令show engine innodb status查看每個內存區域的內存使用情況

3、innodb_old_blocks_time和innodb_old_blocks_pct

InnoDB緩沖池innodb_buffer_pool,內部由LRU鏈表管理

LRU鏈表進一步分為old pages list和young pages list:

old pages list:存放長時間未被訪問的數據頁

young pages list:存放最新、最近被訪問的數據頁

當超過innodb_old_blocks_time參數設置的時間時,就會移動到old pages list,默認是1000ms。

innodb_old_blocks_pct參數決定old pages list在LRU鏈表及innodb_buffer_pool中占比:

存在大表掃描或者執行mysqldump備份操作時,可能會剔除熱數據,增加I/O壓力,因此要適當減少innodb_old_blocks_pct參數值

4、innodb_log_buffer_size和innodb_log_waits

innodb_log_buffer_size:日志緩沖區的大小,取值范圍16MB-64MB

innodb_log_waits:等待日志緩沖刷出的次數

通過命令show global status like "%innodb_log_waits%"查看:

如果發現innodb_log_waits值大于0,并且持續增長,可以考慮增大innodb_log_buffer_size

5、innodb_log_buffer

事務在內存中的緩沖區的大小,即redo log buffer

6、query_cache_size和query_cache_type

query_cache_siz靜態數據的緩存區大小

默認關閉,建議關閉,保證數據庫的TPS

數據倉庫場景可能會選擇開啟

實例啟動前,設置query_cache_size=0和query_cache_type=off才算真正關閉

三、服務端程序緩沖區(PGA)參數

1、sort_buffer_size

用于SQL語句在內存中的臨時排序

2、join_buffer_size

表連接使用,用于BKA

3、read_buffer_size

MyISAM存儲引擎的表順序掃描的緩存

4、read_rnd_buffer_size

隨機讀緩沖區大小

用于mrr特性

5、tmp_table_size和max_heap_table_size

tmp_table_size:SQL語句在排序或者分組時沒有用到索引,會使用臨時表空間

max_heap_table_size:管理heap、memory存儲引擎表

建議tmp_table_size和max_heap_table_siz大小配置一致

三、服務端刷盤參數

內存中的數據需要根據刷新機制決定在某一時刻如何刷新到磁盤,刷新機制涉及redo log buffer、data buffer、binlog cache等內存緩沖區,read thread、write thread、redo log thread、change buffer thread四大I/O線程,及master?thread后臺主線程。

1、innodb_flush_log_at_trx_commit

控制由內存redo log buffer寫入磁盤relo log、和執行刷盤操作的頻率

可選參數值(實踐根據業務場景選擇):

0:redo log thread每隔1s會執行一次刷盤策略;

此種情況,每次事務提交不會觸發redo log thread將日志緩沖中的數據寫入redo log;

性能最好,但是安全性最低,MySQL進程崩潰將會導致丟失1s的數據;

1:每次事務提交時,都會觸發redo log thread將日志緩沖中的數據寫入redo log,并且執行刷盤操作,以便保證數據確實已經寫入磁盤;

安全性最高,但是性能最差;

2:每次事務提交時,都會觸發redo log thread將日志緩沖中的數據寫入redo log,但是不會同時執行刷盤操作;

另外兩個決定redo log buffer刷到磁盤的條件:

master thread每秒進行刷新;

redo log buffer使用超過一半時觸發刷新;

2、sync_binlog

控制由內存binlog cache刷新到磁盤binglog的頻率

參數值為正整數:

0:每次事務提交后,不主動做fsync之類的磁盤同步指令刷新binlog cache,讓FileSystem自行決定同步時機,或者binlog cache滿才同步到磁盤;

1:每次事務提交后,主動做刷新binlog cache到磁盤;

n:每進行n次事務提交后,主動做fsync之類的磁盤同步指令刷新binlog cache到磁盤;

3、數據庫的雙一模式:

innodb_flush_log_at_trx_commit = 1

sync_binlog = 1

4、innodb_max_dirty_pages_pct

控制臟頁的刷新頻率,在buffer pool中dirty page所占的百分比,達到閾值會觸發page cleaner thrad執行臟頁刷新

默認值是75%

建議設置為25%-50%之間,保證數據庫整體的TPS

5、innodb_flush_method

控制InnoDB數據文件、redo log文件的打開刷寫模式;

可選參數值:

O_SYNC:

O_DSYNC:

O_DIRECT:數據文件直接從MySQL InnoDB Buffer寫入到磁盤,不用通過OS buffer;

四、服務端并發量參數

1、innodb_max_thread_concurrency

InnoDB內核最大并發線程數,默認值為0(含義不受限制)

2、innodb_open_files

InnoDB可同時打開的.ibd文件個數

參數值規則>=10,默認值300

建議調整為65535,提高并發數

3、max_connections和innodb_thread_concurrency

max_connections控制MySQL數據庫最大的連接數,默認值151,高并發場景中經常遇到的"too many connections"異常報錯,即為此參數配置過低或者集群需要水平擴容

innodb_thread_concurrency控制InnoDB內部并發數,參數值為正整數(默認值為0):

0:不受限制;

n:并發數為n,建議設置為服務器邏輯CPU核數的2倍,根據實際情況由小及大逐步調整驗證;

五、服務端事務參數

1、transaction_isolation

事務隔離級別

可選參數值(默認值REPEATABLE-READ):

READ-UNCOMMITTED:讀未提交

READ-COMMITTED:讀已提交

REPEATABLE-READ:可重復讀

SERIALIZABLE:序列化

六、服務端影響I/O性能的參數

1、innodb_log_file_size

redo log日志的大小,需要合理設置:

如果設置偏小,將會導致redo log切換頻繁,產生無用的I/O消耗,影響數據庫性能;

如果設置偏大,將會導致實例宕機恢復需要較長時間;

2、innodb_log_files_in_group

redo log文件組中的日志文件的數量,默認情況下至少需要2個。

3、innodb_stats_on_metadata

information_schema中的表,某些監控程序讀取innodb_stats_on_metadata表

可通過命令"set global innodb_stats_on_metadata=0"關閉

七、服務端慢查詢參數

1、show_query_log

慢查詢日志開關

可選參數值:

1:開啟狀態,推薦配置;

2、long_query_time

慢查詢的時間閾值,單位為秒;

超過閾值就會記錄到慢查詢日志文件;

3、log_queries_not_using_indexs

運行的SQL沒有使用索引,是否記錄到慢查詢日志文件

可選參數值:

on:記錄,推薦配置,set global set log_queries_not_using_indexs=on;

off:不記錄;

八、服務端二進制文件參數

1、expire_logs_days

binlog文件的過期時間,單位為天

2、binlog_format

二進制日志文件的內容格式

可選參數值:

statement:記錄的是一條SQL語句

row:此模式較為安全,不會出現跨庫復制丟失數據的情況;

一般中間件采集數據解析也是這種模式,記錄行變更前的樣子及變更后的內容

mixed:混合模式

九、服務端其它參數

1、innodb_buffer_pool_load_at_startup和innodb_buffer_pool_dump_at_shutdown

快速加載實例宕機前內存中的熱數據,減少磁盤I/O壓力

可選參數值(默認0):

0:關閉狀態

1:啟用狀態

在實例關閉時,將熱數據的元數據信息保存到innodb_buffer_pool_filename參數指定的文件(默認ib_buffer_pool)

在實例啟動時,從innodb_buffer_pool_filenam參數指定的文件(默認ib_buffer_pool)快速加載回內存

2、innodb_data_file_path

指定系統表空間文件的路徑和ibdata1文件的大小

默認大小是10MB

3、interactive_timeout和wait_timeout

interactive_timeout是服務器關閉交互式連接前等待活動的時間,默認值28800s,即8小時

iwait_timeout是服務器關閉非交互式連接前等待活動的時間,默認值28800s,即8小時

兩個參數需要一起調整,并且保持一致,默認值時間過長,建議調整為300s-600s之間

4、server-id

主從環境中,當前MySQL在主從結構中的唯一標識

5、lower_case_table_names

表名稱是否區分大小寫

可選參數值:

0:區分大小寫

1:不區分大小寫,實際存儲使用小寫;

6、innodb_fast_shutdown和innodb_force_recoverty

innodb_fast_shutdown控制表的InnoDB存儲引擎在關閉時的行為

可選參數值:

0:默認值;

需要執行purge all、merge change buffer、flush dirty pages操作;

此方式是最慢的關閉方式,但是restart時最快;

1:不需要執行purge all、merge change buffer等操作,但是需要執行flush dirty pages操作;

2:不完成purge all、merge change buffer等操作,也不刷新臟頁到磁盤;

只是將日志寫入日志文件,因此不會丟數據,但是重新啟動會進行recovery操作;

7、innodb_force_recoverty

控制表的InnoDB存儲引擎在恢復時的行為

可選參數值:

0:默認值,當需要恢復時執行所有操作;

1:忽略檢查到的corrupt頁;

2:阻止主線程的運行,

3:不執行事務回滾操作;

4:不執行插入緩沖的合并操作;

5:不查看撤銷日志,InnoDB存儲引擎會將未提交的事務視為已提交;

6:不執行前滾操作;

7、innodb_status_output和innodb_status_output_locks

數據庫監控信息記錄到error log

建議關閉,防止錯誤日志增長過快,造成磁盤空間使用緊張

8、innodb_io_capacity

InnoDB后臺進程最大的I/O性能指標,影響刷新臟頁和插入緩沖的數量

默認值為200,可根據實際使用的磁盤類型選擇調整

9、auto_increment_increment和auto_increment_offset

auto_increment_increment表示自增長字段每次遞增的量,默認值為1

auto_increment_offset表示自增長字段從哪個值開始,默認值為1

歡迎訂閱個人公眾號,瀏覽更多MySQL技術體系知識。

2c9123dc46843f03bcfc8ee6fff0f299.png

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/533992.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/533992.shtml
英文地址,請注明出處:http://en.pswp.cn/news/533992.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

svd降維 python案例_SVD(奇異值分解)Python實現

注: 在《SVD(異值分解)小結 》中分享了SVD原理,但其中只是利用了numpy.linalg.svd函數應用了它,并沒有提到如何自己編寫代碼實現它,在這里,我再分享一下如何自已寫一個SVD函數。但是這里會利用到SVD的原理,…

salt 啟動mysql_saltsack自動化配置day03:服務部署mysql部署

一、MySQL集群需求分享1、抽象:功能模塊把基礎的寫成通用服務部署也要抽象出來模塊redis內存有的多,有的少,可以config set在線更改redis 安裝、配置、啟動mysql 安裝、配置(my.cnf可以統一 目錄默認配置可以統一)master: server_id 1111slav…

jtag引腳定義_從逆向分析的角度學習硬件調試技巧JTAG,SSD和固件提取

我想從逆向的角度做了深入了解JTAG,JTAG是許多嵌入式CPU使用的硬件級別調試機制,我希望通過這篇文章從逆向工程師的角度解釋如何使用JTAG,并在此過程中提供一些實際示例。0x01 研究目標通過這篇文章,我希望做到以下幾點&#xff1…

python virtualenv conda_在vscode中啟動conda虛擬環境的思路詳解

問題:cudatoolkit cudnn 通過conda 虛擬環境安裝,先前已經使用virtualenv安裝tf,需要在conda虛擬環境中啟動外部python虛擬環境思路:conda prompt即將 [虛擬環境位置] 以參數形式傳入 [activate.bat]VSOCDE中的設置添加以下語句{&…

python如何導入圖片imread_OpenCV 使用imread()函數讀取圖片的六種正確姿勢

經常看到有人在網上詢問關于imread()函數讀取圖片失敗的問題。今天心血來潮,經過實驗,總結出imread()調用的四種正確姿勢。通常我要獲取一張圖片的絕對路徑是這樣做的:在圖片上右鍵——屬性——安全——對象名稱。然后復制對象名稱就得到了圖…

python2.7與3.7腳本轉換_python 2.7 - python 3.7 升級記錄

更換的模塊python 3.7 模塊名python 2.7 模塊名python 3.7 包python 2.7包pymysqlMySQLdbPyMySQLMySQL-pythonpdfminerpdfminerpdfminer.sixpdfminerurllib.parseurlparse自帶自帶htmlHTMLParser自帶HTMLparser語法變化1. print 修改為 print()2. except Exception, e 修改為 e…

遠程過程調用失敗_Java開發大型互聯網RPC遠程調用服務實現之問題處理方案

引言RPC(Remote Procedure Call Protocol)——遠程過程調用協議,它是一種通過網絡從遠程計算機程序上請求服務,而不需要了解底層網絡技術的協議。RPC協議假定某些傳輸協議的存在,如TCP或UDP,為通信程序之間攜帶信息數據。在OSI網絡…

chrome 新的session 設置_為什么還是由這么多人搞不懂Cookie、Session、Token?

作者:不學無數的程序員鏈接:https://urlify.cn/Yfm6Vr# Cookie洛:大爺,樓上322住的是馬冬梅家吧? 大爺:馬都什么? 夏洛:馬冬梅。 7大爺:什么都沒啊? 夏洛…

mysql for update用處_for update的作用和用法

一、for update定義for update是一種行級鎖,又叫排它鎖,一旦用戶對某個行施加了行級加鎖,則該用戶可以查詢也可以更新被加鎖的數據行,其它用戶只能查詢但不能更新被加鎖的數據行.如果其它用戶想更新該表中的數據行&…

python大數據零基礎_零基礎學習大數據人工智能,學習路線篇!

大數據處理技術怎么學習呢?首先我們要學習Python語言和Linux操作系統,這兩個是學習大數據的基礎,學習的順序不分前后。Python:Python 的排名從去年開始就借助人工智能持續上升,現在它已經成為了語言排行第一名。從學習難易度來看…

python刪除文件和linux刪除文件區別_使用Python批量刪除文件列表

使用Python批量刪除文件列表環境:已知要刪除的文件列表,即確定哪些文件要刪除。代碼如下:#!/usr/bin/env python#codingutf-8#目的:本程序主要為刪除給定的文件列表import osimport shutil#引入模塊,os為包含普遍的操作…

華為python有必要學嗎_【華為云技術分享】這個 Python 庫有必要好好學學

這里看一個最基本的例子,這里給到一個 User 的 Class 定義,再給到一個 data 數據,像這樣:1 class User(object):2 def __init__(self, name, age):3 self.name name4 self.age age56 data [{7 name: Germey,8 age: 239 }, {10 nam…

python求平行四邊形面積_python 已知平行四邊形三個點,求第四個點的案例

我就廢話不多說了,大家還是直接看代碼吧!import numpy as np#已知平行四邊形三個點,求第四個點#計算兩點之間的距離def CalcEuclideanDistance(point1,point2):vec1 np.array(point1)vec2 np.array(point2)distance np.linalg.norm(vec1 -…

eview面板數據之混合回歸模型_【視頻教程】Eviews系列25|面板數據回歸分析之Hausman檢驗及本章常見問題解答...

點擊上方關注我們!本期我們學習Eviews統計建模最后一部分--面板數據回歸分析Hausman檢驗及本章常見問題解答。實操:Hausman檢驗判斷是固定效應模型還是隨機效應模型上期我們講到模型判斷若選擇模型2,需進一步通過Hausman檢驗判斷固定效應還是隨機效應,接…

python打出由邊框包圍的_python opencv 圖像邊框(填充)添加及圖像混合的實現方法(末尾實現類似幻燈片漸變的效果)...

圖像邊框的實現圖像邊框設計的主要函數cv.copyMakeBorder()——實現邊框填充主要參數如下:參數一:源圖像——如:讀取的img參數二——參數五分別是:上下左右邊的寬度——單位:像素參數六:邊框類型&#xff1…

mysql5.7.21備份腳本_Shell腳本使用匯總整理——mysql數據庫5.7.8以后備份腳本

#!/bin/sh#db_backups_conf.txt文件路徑db_backups_conf"/wocloud/shell/db_backups_conf.txt"#判斷文件是否存在if [ -f "${db_backups_conf}" ];thenecho $(date %Y-%m-%d %H:%M:%S)" 數據庫配置信息文件存在,開始進行數據備份"#獲…

python嵌套列表操作_python基礎(list列表的操作,公共方法,列表嵌套,元祖)...

list 列表索引,切片與str相同。列表的操作(增刪改查)1,增加.append()  追加,增加到最后li [alex,wusir,egon,女神,taibai]li.append(ppp)print(li).insert()  中間插入,通過索引li [alex,wusir,egon,女神,taibai]li.insert(…

mybatis mysql selectkey_Mybatis示例之SelectKey的應用

SelectKey在Mybatis中是為了解決Insert數據時不支持主鍵自動生成的問題,他可以很隨意的設置生成主鍵的方式。不管SelectKey有多好,盡量不要遇到這種情況吧,畢竟很麻煩。SelectKey需要注意order屬性,像Mysql一類支持自動增長類型的…

python程序設計上機實踐第三章答案_20192419 實驗三《Python程序設計》實驗報告

學號 2019-2020-2 《Python程序設計》實驗3報告課程:《Python程序設計》班級:1924姓名: 萬騰陽學號:20192419實驗教師:王志強實驗日期:2020年5月16日必修/選修: 公選課1.實驗內容創建服務端和客…

完成數獨的算法 python_python實現數獨算法實例

本文實例講述了python實現數獨算法的方法。分享給大家供大家參考。具體如下:# -*- coding: utf-8 -*-Created on 2012-10-5author: Administratorfrom collections import defaultdictimport itertoolsa [[ 0, 7, 0, 0, 0, 0, 0, 0, 0], #0[ 5, 0, 3, 0, 0, 6, 0, …