mysql服務(wù)器的參數(shù)類(lèi)型
基于參數(shù)的作用域:
全局參數(shù)
set global autocommit = ON/OFF;
會(huì)話(huà)參數(shù)(會(huì)話(huà)參數(shù)不單獨(dú)設(shè)置則會(huì)采用全局參數(shù))
set session autocommit = ON/OFF;
注意:
全局參數(shù)的設(shè)定對(duì)于已經(jīng)存在的會(huì)話(huà)無(wú)法生效
會(huì)話(huà)參數(shù)的設(shè)定隨著會(huì)話(huà)的銷(xiāo)毀而失效
全局類(lèi)的統(tǒng)一配置建議配置在默認(rèn)配置文件中,否則重啟服務(wù)會(huì)導(dǎo)致配置失效
mysql --help
尋找配置文件的位置和加載順序
Default options are read from the following files in the given order:
/etc/my.cnf /etc/mysql/my.cnf /usr/etc/my.cnf ~/.my.cnf
mysql --help | grep -A 1 'Default options are read from the following
files in the given order'
最大連接數(shù)配置
max_connections
系統(tǒng)句柄數(shù)配置
/etc/security/limits.conf
ulimit -a
mysql句柄數(shù)配置
/usr/lib/systemd/system/mysqld.service
配置文件的參數(shù):
port = 3306
socket = /tmp/mysql.sock
basedir = /usr/local/mysql
datadir = /data/mysql
pid-file = /data/mysql/mysql.pid
user = mysql
bind-address = 0.0.0.0
max_connections=2000
lower_case_table_names = 0 #表名區(qū)分大小寫(xiě)
server-id = 1
tmp_table_size=16M
transaction_isolation = REPEATABLE-READ
ready_only=1
每一個(gè)connection內(nèi)存參數(shù)配置:
sort_buffer_size connection排序緩沖區(qū)大小
建議256K(默認(rèn)值)-> 2M之內(nèi)
當(dāng)查詢(xún)語(yǔ)句中有需要文件排序功能時(shí),馬上為connection分配配置的內(nèi)存大小
join_buffer_size connection關(guān)聯(lián)查詢(xún)緩沖區(qū)大小
建議256K(默認(rèn)值)-> 1M之內(nèi)
當(dāng)查詢(xún)語(yǔ)句中有關(guān)聯(lián)查詢(xún)時(shí)佩迟,馬上分配配置大小的內(nèi)存用這個(gè)關(guān)聯(lián)查詢(xún)现喳,所以有可能在一個(gè)查詢(xún)語(yǔ)句中會(huì)分配很多個(gè)關(guān)聯(lián)查詢(xún)緩沖區(qū)
上述配置4000連接占用內(nèi)存:
4000*(0.256M+0.256M) = 2G
Innodb_buffer_pool_size
innodb buffer/cache的大星吞(默認(rèn)128M)
Innodb_buffer_pool
數(shù)據(jù)緩存
索引緩存
緩沖數(shù)據(jù)
內(nèi)部結(jié)構(gòu)
大的緩沖池可以減小多次磁盤(pán)I/O訪(fǎng)問(wèn)相同的表數(shù)據(jù)以提高性能
參考計(jì)算公式:
Innodb_buffer_pool_size = (總物理內(nèi)存 - 系統(tǒng)運(yùn)行所用 - connection 所用)* 90%
wait_timeout
服務(wù)器關(guān)閉非交互連接之前等待活動(dòng)的秒數(shù)
innodb_open_files
限制Innodb能打開(kāi)的表的個(gè)數(shù)
innodb_write_io_threads
innodb_read_io_threads
innodb使用后臺(tái)線(xiàn)程處理innodb緩沖區(qū)數(shù)據(jù)頁(yè)上的讀寫(xiě) I/O(輸入輸出)請(qǐng)求
innodb_lock_wait_timeout
InnoDB事務(wù)在被回滾之前可以等待一個(gè)鎖定的超時(shí)秒數(shù)
https://www.cnblogs.com/wyy123/p/6092976.html 常見(jiàn)配置的帖子
數(shù)據(jù)庫(kù)三范式
第一范式( 1NF):
字段具有原子性,不可再分师幕。 所有關(guān)系型數(shù)據(jù)庫(kù)系統(tǒng)都滿(mǎn)足第一范式)數(shù)據(jù)庫(kù)表中的字段都是單一屬性的隆圆, 不可再分;
第二范式( 2NF):
要求實(shí)體的屬性完全依賴(lài)于主鍵俭识。 所謂完全依賴(lài)是指不能存在僅依賴(lài)主鍵一部分的屬性,如果存在洞渔, 那么這個(gè)屬性和主關(guān)鍵字的這一部分應(yīng)該分離出來(lái)形成一個(gè)新的實(shí)體套媚, 新實(shí)體與原實(shí)體之間是一對(duì)多的關(guān)系。為實(shí)現(xiàn)區(qū)分通常需要為表加上一個(gè)列磁椒,以存儲(chǔ)各個(gè)實(shí)例的惟一標(biāo)識(shí)凑阶。
簡(jiǎn)而言之, 第二范式就是屬性完全依賴(lài)主鍵衷快。
第三范式( 3NF):
滿(mǎn)足第三范式( 3NF) 必須先滿(mǎn)足第二范式( 2NF)宙橱。 簡(jiǎn)而言之, 第三范式( 3NF)要求一個(gè)數(shù)據(jù)庫(kù)表中不包含已在其它表中已包含的非主鍵信息蘸拔。
簡(jiǎn)單一點(diǎn):
1师郑, 每一列只有一個(gè)單一的值,不可再拆分
2调窍, 每一行都有主鍵能進(jìn)行區(qū)分
3宝冕, 每一個(gè)表都不包含其他表已經(jīng)包含的非主鍵信息。
充分的滿(mǎn)足第一范式設(shè)計(jì)將為表建立太量的列
數(shù)據(jù)從磁盤(pán)到緩沖區(qū)邓萨,緩沖區(qū)臟頁(yè)到磁盤(pán)進(jìn)行持久的過(guò)程中地梨,列的數(shù)量過(guò)多會(huì)導(dǎo)致性能下降。過(guò)多的列影響轉(zhuǎn)換和持久的性能
過(guò)分的滿(mǎn)足第三范式化造成了太多的表關(guān)聯(lián)
表的關(guān)聯(lián)操作將帶來(lái)額外的內(nèi)存和性能開(kāi)銷(xiāo)
使用innodb引擎的外鍵關(guān)系進(jìn)行數(shù)據(jù)的完整性保證
外鍵表中數(shù)據(jù)的修改會(huì)導(dǎo)致Innodb引擎對(duì)外鍵約束進(jìn)行檢查缔恳,就帶來(lái)了額外的開(kāi)銷(xiāo)