欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

mysql變量怎么調(diào),在mysql 中怎么修改數(shù)據(jù)

Win10系統(tǒng)安裝mysql后怎么配置環(huán)境變量?

第一步,使用快捷鍵“win+I”進(jìn)入設(shè)置窗口,選中“System”,雙擊將其打開(kāi);

創(chuàng)新互聯(lián)于2013年成立,是專(zhuān)業(yè)互聯(lián)網(wǎng)技術(shù)服務(wù)公司,擁有項(xiàng)目做網(wǎng)站、網(wǎng)站制作網(wǎng)站策劃,項(xiàng)目實(shí)施與項(xiàng)目整合能力。我們以讓每一個(gè)夢(mèng)想脫穎而出為使命,1280元怒江州做網(wǎng)站,已為上家服務(wù),為怒江州各地企業(yè)和個(gè)人服務(wù),聯(lián)系電話:028-86922220

第二步,在“System”窗口中找到“About”,然后打開(kāi)其中的“System info”;

第三步,找到新窗口中的“Advanced system settings”,單擊后進(jìn)入下一步;

第四步,在右側(cè)的“System Properties”界面中找到、并打開(kāi)“Environment Variables…”;

第五步,找到“Environment Variables”中的“System variables”,然后選中”path“項(xiàng),選擇“edit”進(jìn)入編輯功能;

第六步,找到“Edit environment variable”中的“New”,進(jìn)入新建環(huán)境變量程序;

第七步,在新彈出的輸入框中輸入mysql的安裝路徑,例如“C:\Program Files\MySQL\MySQL Server 5.7\bin”,其中“bin”就是mysql的安裝位置,點(diǎn)擊“OK”即可。

第八步,快捷鍵“win+r”進(jìn)入運(yùn)行窗口,并在輸入框中輸入“cmd”,進(jìn)入命令窗口;

第九步,在如下圖所示的位置輸入“mysql-uroot-p”,回車(chē),隨后按提示輸入mysql密碼,這時(shí)候我們已經(jīng)可以打開(kāi)mysql了。

windows環(huán)境mysql環(huán)境變量設(shè)置方法

1、對(duì)于命令控來(lái)說(shuō),在cmd命令下行下操作很方便,但有時(shí)需要直接在命令行床空?qǐng)?zhí)行mysql這樣的命令,會(huì)出現(xiàn)”mysql不是內(nèi)部或外部命令“這樣的錯(cuò)誤提示,原因是mysql其實(shí)是一個(gè)exe文件,存放于myql安裝路徑/bin下,因此需要將mysql的安裝路徑配置到path環(huán)境變量中,如此以后就不用每次都cd到mysql路徑下了;

2、設(shè)置完成后我們?cè)僭囋嚳?cmd--mysql

已經(jīng)連接上mysql了,接下來(lái)我們可以使用dml、sql語(yǔ)言來(lái)創(chuàng)建我們自己的數(shù)據(jù)庫(kù)了;

3、首先,要?jiǎng)?chuàng)建一個(gè)數(shù)據(jù)庫(kù)名字為test_user;

創(chuàng)建成功!

4、創(chuàng)建一個(gè)張數(shù)據(jù)表,使用腳本即可。

注意,創(chuàng)建table之前一定要use databasename;

你能用這個(gè)命令得到mysqld服務(wù)器缺省緩沖區(qū)大小:

shellmysqld--help

這個(gè)命令生成一張所有mysqld選項(xiàng)和可配置變量的表。輸出包括缺省值并且看上去象這樣一些東西:

如果有一個(gè)mysqld服務(wù)器正在運(yùn)行,通過(guò)執(zhí)行這個(gè)命令,你可以看到它實(shí)際上使用的變量的值:

shellmysqladminvariables

每個(gè)選項(xiàng)在下面描述。對(duì)于緩沖區(qū)大小、長(zhǎng)度和棧大小的值以字節(jié)給出,你能用于個(gè)后綴“K”或“M”指出以K字節(jié)或兆字節(jié)顯示值。例如,16M指出16兆字節(jié)。后綴字母的大小寫(xiě)沒(méi)有關(guān)系;16M和16m是相同的。

你也可以用命令SHOWSTATUS自一個(gè)運(yùn)行的服務(wù)器看見(jiàn)一些統(tǒng)計(jì)。見(jiàn)7.21SHOW語(yǔ)法(得到表、列的信息)。

back_log

要求MySQL能有的連接數(shù)量。當(dāng)主要MySQL線程在一個(gè)很短時(shí)間內(nèi)得到非常多的連接請(qǐng)求,這就起作用,然后主線程花些時(shí)間(盡管很短)檢查連接并且啟動(dòng)一個(gè)新線程。back_log值指出在MySQL暫時(shí)停止回答新請(qǐng)求之前的短時(shí)間內(nèi)多少個(gè)請(qǐng)求可以被存在堆棧中。只有如果期望在一個(gè)短時(shí)間內(nèi)有很多連接,你需要增加它,換句話說(shuō),這值對(duì)到來(lái)的TCP/IP連接的偵聽(tīng)隊(duì)列的大小。你的操作系統(tǒng)在這個(gè)隊(duì)列大小上有它自己的限制。Unixlisten(2)系統(tǒng)調(diào)用的手冊(cè)頁(yè)應(yīng)該有更多的細(xì)節(jié)。檢查你的OS文檔找出這個(gè)變量的最大值。試圖設(shè)定back_log高于你的操作系統(tǒng)的`限制將是無(wú)效的。

connect_timeout

mysqld服務(wù)器在用Badhandshake(糟糕的握手)應(yīng)答前正在等待一個(gè)連接報(bào)文的秒數(shù)。

delayed__timeout

一個(gè)InsertDELAYED線程應(yīng)該在終止之前等待Insert語(yǔ)句的時(shí)間。

delayed__limit

在插入delayed__limit行后,InsertDELAYED處理器將檢查是否有任何Select語(yǔ)句未執(zhí)行。如果這樣,在繼續(xù)前執(zhí)行允許這些語(yǔ)句。

delayed_queue_size

應(yīng)該為處理InsertDELAYED分配多大一個(gè)隊(duì)列(以行數(shù))。如果排隊(duì)滿了,任何進(jìn)行InsertDELAYED的客戶將等待直到隊(duì)列又有空間了。

flush_time

如果這被設(shè)置為非零值,那么每flush_time秒所有表將被關(guān)閉(以釋放資源和sync到磁盤(pán))。

interactive_timeout

服務(wù)器在關(guān)上它前在一個(gè)交互連接上等待行動(dòng)的秒數(shù)。一個(gè)交互的客戶被定義為對(duì)mysql_real_connect()使用CLIENT_INTERACTIVE選項(xiàng)的客戶。也可見(jiàn)wait_timeout。

join_buffer_size

用于全部聯(lián)結(jié)(join)的緩沖區(qū)大小(不是用索引的聯(lián)結(jié))。緩沖區(qū)對(duì)2個(gè)表間的每個(gè)全部聯(lián)結(jié)分配一次緩沖區(qū),當(dāng)增加索引不可能時(shí),增加該值可得到一個(gè)更快的全部聯(lián)結(jié)。(通常得到快速聯(lián)結(jié)的最佳方法是增加索引。)

key_buffer_size

索引塊是緩沖的并且被所有的線程共享。key_buffer_size是用于索引塊的緩沖區(qū)大小,增加它可得到更好處理的索引(對(duì)所有讀和多重寫(xiě)),到你能負(fù)擔(dān)得起那樣多。如果你使它太大,系統(tǒng)將開(kāi)始換頁(yè)并且真的變慢了。記住既然MySQL不緩存讀取的數(shù)據(jù),你將必須為OS文件系統(tǒng)緩存留下一些空間。為了在寫(xiě)入多個(gè)行時(shí)得到更多的速度,使用LOCKTABLES。見(jiàn)7.24LOCKTABLES/UNLOCKTABLES語(yǔ)法。

long_query_time

如果一個(gè)查詢所用時(shí)間超過(guò)它(以秒計(jì)),Slow_queries記數(shù)器將被增加。

max_allowed_packet

一個(gè)包的最大尺寸。消息緩沖區(qū)被初始化為net_buffer_length字節(jié),但是可在需要時(shí)增加到max_allowed_packet個(gè)字節(jié)。缺省地,該值太小必能捕捉大的(可能錯(cuò)誤)包。如果你正在使用大的BLOB列,你必須增加該值。它應(yīng)該象你想要使用的最大BLOB的那么大。

max_connections

允許的同時(shí)客戶的數(shù)量。增加該值增加mysqld要求的文件描述符的數(shù)量。見(jiàn)下面對(duì)文件描述符限制的注釋。見(jiàn)18.2.4Toomanyconnections錯(cuò)誤。

max_connect_errors

如果有多于該數(shù)量的從一臺(tái)主機(jī)中斷的連接,這臺(tái)主機(jī)阻止進(jìn)一步的連接。你可用FLUSHHOSTS命令疏通一臺(tái)主機(jī)。

max_delayed_threads

不要啟動(dòng)多于的這個(gè)數(shù)字的線程來(lái)處理InsertDELAYED語(yǔ)句。如果你試圖在所有InsertDELAYED線程在用后向一張新表插入數(shù)據(jù),行將入,就像DELAYED屬性沒(méi)被指定那樣。

max_join_size

可能將要讀入多于max_join_size個(gè)記錄的聯(lián)結(jié)將返回一個(gè)錯(cuò)誤。如果你的用戶想要執(zhí)行沒(méi)有一個(gè)Where子句、花很長(zhǎng)時(shí)間并且返回百萬(wàn)行的聯(lián)結(jié),設(shè)置它。

max_sort_length

在排序BLOB或TEXT值時(shí)使用的字節(jié)數(shù)(每個(gè)值僅頭max_sort_length個(gè)字節(jié)被使用;其余的被忽略)。

max_tmp_tables

(該選擇目前還不做任何事情)。一個(gè)客戶能同時(shí)保持打開(kāi)的臨時(shí)表的最大數(shù)量。

net_buffer_length

通信緩沖區(qū)在查詢之間被重置到該大小。通常這不應(yīng)該被改變,但是如果你有很少的內(nèi)存,你能將它設(shè)置為查詢期望的大小。(即,客戶發(fā)出的SQL語(yǔ)句期望的長(zhǎng)度。如果語(yǔ)句超過(guò)這個(gè)長(zhǎng)度,緩沖區(qū)自動(dòng)地被擴(kuò)大,直到max_allowed_packet個(gè)字節(jié)。)

record_buffer

每個(gè)進(jìn)行一個(gè)順序掃描的線程為其掃描的每張表分配這個(gè)大小的一個(gè)緩沖區(qū)。如果你做很多順序掃描,你可能想要增加該值。

sort_buffer

每個(gè)需要進(jìn)行排序的線程分配該大小的一個(gè)緩沖區(qū)。增加這值加速ORDERBY或GROUPBY操作。見(jiàn)18.5MySQL在哪兒存儲(chǔ)臨時(shí)文件。

table_cache

為所有線程打開(kāi)表的數(shù)量。增加該值能增加mysqld要求的文件描述符的數(shù)量。MySQL對(duì)每個(gè)唯一打開(kāi)的表需要2個(gè)文件描述符,見(jiàn)下面對(duì)文件描述符限制的注釋。對(duì)于表緩存如何工作的信息,見(jiàn)10.2.4MySQL怎樣打開(kāi)和關(guān)閉表。

tmp_table_size

如果一張臨時(shí)表超出該大小,MySQL產(chǎn)生一個(gè)Thetabletbl_nameisfull形式的錯(cuò)誤,如果你做很多高級(jí)GROUPBY查詢,增加tmp_table_size值。

thread_stack

每個(gè)線程的棧大小。由crash-me測(cè)試檢測(cè)到的許多限制依賴于該值。缺省隊(duì)一般的操作是足夠大了。見(jiàn)10.8使用你自己的基準(zhǔn)。

wait_timeout

服務(wù)器在關(guān)閉它之前在一個(gè)連接上等待行動(dòng)的秒數(shù)。也可見(jiàn)interactive_timeout。

MySQL使用是很具伸縮性的算法,因此你通常能用很少的內(nèi)存運(yùn)行或給MySQL更多的被存以得到更好的性能。

如果你有很多內(nèi)存和很多表并且有一個(gè)中等數(shù)量的客戶,想要最大的性能,你應(yīng)該一些象這樣的東西:

shellsafe_mysqld-Okey_buffer=16M-Otable_cache=128

?????-Osort_buffer=4M-Orecord_buffer=1M

如果你有較少的內(nèi)存和大量的連接,使用這樣一些東西:

shellsafe_mysqld-Okey_buffer=512k-Osort_buffer=100k

?????-Orecord_buffer=100k

或甚至:

shellsafe_mysqld-Okey_buffer=512k-Osort_buffer=16k

?????-Otable_cache=32-Orecord_buffer=8k-Onet_buffer=1K

如果有很多連接,“交換問(wèn)題”可能發(fā)生,除非mysqld已經(jīng)被配置每個(gè)連接使用很少的內(nèi)存。當(dāng)然如果你對(duì)所有連接有足夠的內(nèi)存,mysqld執(zhí)行得更好。

注意,如果你改變mysqld的一個(gè)選項(xiàng),它實(shí)際上只對(duì)服務(wù)器的那個(gè)例子保持。

為了明白一個(gè)參數(shù)變化的效果,這樣做:

shellmysqld-Okey_buffer=32m--help

保證--help選項(xiàng)是最后一個(gè);否則,命令行上在它之后列出的任何選項(xiàng)的效果將不在反映在輸出中。

如何修改MYSQL的系統(tǒng)變量

MySQL系統(tǒng)變量(system variables)實(shí)際上是一些系統(tǒng)參數(shù),用于初始化或設(shè)定數(shù)據(jù)庫(kù)對(duì)系統(tǒng)資源的占用,文件存放位置等等。 mysql show variables like "log"; +---------------+-------+Variable_name Value +---------------+-------+log OFF +---------------+-------+ 1 row in set (0f [mysqld] wait_timeout=10 # service mysqld restart 不過(guò)這個(gè)方法太生硬了, 線上服務(wù)重啟無(wú)論如何都應(yīng)該盡可能避免f [mysqld] wait_timeout=103) 設(shè)置會(huì)話變量方法: 在命令行里通過(guò)SET來(lái)設(shè)置 如果要修改會(huì)話變量值, 可以指定"SESSION"或者"@@session."或者"@@"或者"LOCAL"或者"@@local.", 或者什么都不使用. mysql set wait_timeout=10; or mysql set session wait_timeout=10; or mysql set local wait_timeout=10; or mysql set @@wait_timeout=10; or mysql set @@session.wait_timeout=10; or mysql set @@local.wait_timeout=10;然后查看設(shè)置是否成功: mysql select @@wait_timeout; or mysql select @@session.wait_timeout; or mysql select @@local.wait_timeout; or mysql show variables like 'wait_timeout'; or mysql show local variables like 'wait_timeout'; or mysql show session variables like 'wait_timeout'; +---------------+-------+Variable_name Value +---------------+-------+wait_timeout 10 +---------------+-------+4) 會(huì)話變量和全局變量轉(zhuǎn)換方法: 在命令行里通過(guò)SET來(lái)設(shè)置 將會(huì)話變量值設(shè)置為對(duì)應(yīng)的全局變量值呢: mysql set @@session.wait_timeout=@@global.wait_timeout; 將會(huì)話變量值設(shè)置為MySQL編譯時(shí)的默認(rèn)值(wait_timeout=28800): mysql set wait_timeout=DEFAULT; 這里要注意的是, 并不是所有的系統(tǒng)變量都能被設(shè)置為DEFAULT, 如果設(shè)置這些變量為DEFAULT則會(huì)返回錯(cuò)誤. 參考資料:

MySQL性能調(diào)優(yōu) – 你必須了解的15個(gè)重要變量

前言:

MYSQL 應(yīng)該是最流行了 WEB 后端數(shù)據(jù)庫(kù)。雖然 NOSQL 最近越來(lái)越多的被提到,但是相信大部分架構(gòu)師還是會(huì)選擇 MYSQL 來(lái)做數(shù)據(jù)存儲(chǔ)。本文作者總結(jié)梳理MySQL性能調(diào)優(yōu)的15個(gè)重要變量,又不足需要補(bǔ)充的還望大佬指出。

1.DEFAULT_STORAGE_ENGINE

如果你已經(jīng)在用MySQL 5.6或者5.7,并且你的數(shù)據(jù)表都是InnoDB,那么表示你已經(jīng)設(shè)置好了。如果沒(méi)有,確保把你的表轉(zhuǎn)換為InnoDB并且設(shè)置default_storage_engine為InnoDB。

為什么?簡(jiǎn)而言之,因?yàn)镮nnoDB是MySQL(包括Percona Server和MariaDB)最好的存儲(chǔ)引擎 – 它支持事務(wù),高并發(fā),有著非常好的性能表現(xiàn)(當(dāng)配置正確時(shí))。這里有詳細(xì)的版本介紹為什么

2.INNODB_BUFFER_POOL_SIZE

這個(gè)是InnoDB最重要變量。實(shí)際上,如果你的主要存儲(chǔ)引擎是InnoDB,那么對(duì)于你,這個(gè)變量對(duì)于MySQL是最重要的。

基本上,innodb_buffer_pool_size指定了MySQL應(yīng)該分配給InnoDB緩沖池多少內(nèi)存,InnoDB緩沖池用來(lái)存儲(chǔ)緩存的數(shù)據(jù),二級(jí)索引,臟數(shù)據(jù)(已經(jīng)被更改但沒(méi)有刷新到硬盤(pán)的數(shù)據(jù))以及各種內(nèi)部結(jié)構(gòu)如自適應(yīng)哈希索引。

根據(jù)經(jīng)驗(yàn),在一個(gè)獨(dú)立的MySQL服務(wù)器應(yīng)該分配給MySQL整個(gè)機(jī)器總內(nèi)存的80%。如果你的MySQL運(yùn)行在一個(gè)共享服務(wù)器,或者你想知道InnoDB緩沖池大小是否正確設(shè)置,詳細(xì)請(qǐng)看這里。

3.INNODB_LOG_FILE_SIZE

InnoDB重做日志文件的設(shè)置在MySQL社區(qū)也叫做事務(wù)日志。直到MySQL 5.6.8事務(wù)日志默認(rèn)值innodb_log_file_size=5M是唯一最大的InnoDB性能殺手。從MySQL 5.6.8開(kāi)始,默認(rèn)值提升到48M,但對(duì)于許多稍繁忙的系統(tǒng),還遠(yuǎn)遠(yuǎn)要低。

根據(jù)經(jīng)驗(yàn),你應(yīng)該設(shè)置的日志大小能在你服務(wù)器繁忙時(shí)能存儲(chǔ)1-2小時(shí)的寫(xiě)入量。如果不想這么麻煩,那么設(shè)置1-2G的大小會(huì)讓你的性能有一個(gè)不錯(cuò)的表現(xiàn)。這個(gè)變量也相當(dāng)重要,更詳細(xì)的介紹請(qǐng)看這里。

當(dāng)然,如果你有大量的大事務(wù)更改,那么,更改比默認(rèn)innodb日志緩沖大小更大的值會(huì)對(duì)你的性能有一定的提高,但是你使用的是autocommit,或者你的事務(wù)更改小于幾k,那還是保持默認(rèn)的值吧。

4.INNODB_FLUSH_LOG_AT_TRX_COMMIT

默認(rèn)下,innodb_flush_log_at_trx_commit設(shè)置為1表示InnoDB在每次事務(wù)提交后立即刷新同步數(shù)據(jù)到硬盤(pán)。如果你使用autocommit,那么你的每一個(gè)INSERT, UPDATE或DELETE語(yǔ)句都是一個(gè)事務(wù)提交。

同步是一個(gè)昂貴的操作(特別是當(dāng)你沒(méi)有寫(xiě)回緩存時(shí)),因?yàn)樗婕皩?duì)硬盤(pán)的實(shí)際同步物理寫(xiě)入。所以如果可能,并不建議使用默認(rèn)值。

兩個(gè)可選的值是0和2:

* 0表示刷新到硬盤(pán),但不同步(提交事務(wù)時(shí)沒(méi)有實(shí)際的IO操作)

* 2表示不刷新和不同步(也沒(méi)有實(shí)際的IO操作)

所以你如果設(shè)置它為0或2,則同步操作每秒執(zhí)行一次。所以明顯的缺點(diǎn)是你可能會(huì)丟失上一秒的提交數(shù)據(jù)。具體來(lái)說(shuō),你的事務(wù)已經(jīng)提交了,但服務(wù)器馬上斷電了,那么你的提交相當(dāng)于沒(méi)有發(fā)生過(guò)。

顯示的,對(duì)于金融機(jī)構(gòu),如銀行,這是無(wú)法忍受的。不過(guò)對(duì)于大多數(shù)網(wǎng)站,可以設(shè)置為innodb_flush_log_at_trx_commit=0|2,即使服務(wù)器最終崩潰也沒(méi)有什么大問(wèn)題。畢竟,僅僅在幾年前有許多網(wǎng)站還是用MyISAM,當(dāng)崩潰時(shí)會(huì)丟失30s的數(shù)據(jù)(更不要提那令人抓狂的慢修復(fù)進(jìn)程)。

那么,0和2之間的實(shí)際區(qū)別是什么?性能明顯的差異是可以忽略不計(jì),因?yàn)樗⑿碌讲僮飨到y(tǒng)緩存的操作是非常快的。所以很明顯應(yīng)該設(shè)置為0,萬(wàn)一MySQL崩潰(不是整個(gè)機(jī)器),你不會(huì)丟失任何數(shù)據(jù),因?yàn)閿?shù)據(jù)已經(jīng)在OS緩存,最終還是會(huì)同步到硬盤(pán)的。

5.SYNC_BINLOG

已經(jīng)有大量的文檔寫(xiě)到sync_binlog,以及它和innodb_flush_log_at_trx_commit的關(guān)系,下面我們來(lái)簡(jiǎn)單的介紹下:

a) 如果你的服務(wù)器沒(méi)有設(shè)置從服務(wù)器,而且你不做備份,那么設(shè)置sync_binlog=0將對(duì)性能有好處。

b) 如果你有從服務(wù)器并且做備份,但你不介意當(dāng)主服務(wù)器崩潰時(shí)在二進(jìn)制日志丟失一些事件,那么為了更好的性能還是設(shè)置為sync_binlog=0.

c) 如果你有從服務(wù)器并且備份,你非常在意從服務(wù)器的一致性,以及能及時(shí)恢復(fù)到一個(gè)時(shí)間點(diǎn)(通過(guò)使用最新的一致性備份和二進(jìn)制日志將數(shù)據(jù)庫(kù)恢復(fù)到特定時(shí)間點(diǎn)的能力),那么你應(yīng)該設(shè)置innodb_flush_log_at_trx_commit=1,并且需要認(rèn)真考慮使用sync_binlog=1。

問(wèn)題是sync_binlog=1代價(jià)比較高 – 現(xiàn)在每個(gè)事務(wù)也要同步一次到硬盤(pán)。你可能會(huì)想為什么不把兩次同步合并成一次,想法正確 – 新版本的MySQL(5.6和5.7,MariaDB和Percona Server)已經(jīng)能合并提交,那么在這種情況下sync_binlog=1的操作也不是這么昂貴了,但在舊的mysql版本中仍然會(huì)對(duì)性能有很大影響。

6.INNODB_FLUSH_METHOD

將innodb_flush_method設(shè)置為O_DIRECT以避免雙重緩沖.唯一一種情況你不應(yīng)該使用O_DIRECT是當(dāng)你操作系統(tǒng)不支持時(shí)。但如果你運(yùn)行的是Linux,使用O_DIRECT來(lái)激活直接IO。

不用直接IO,雙重緩沖將會(huì)發(fā)生,因?yàn)樗械臄?shù)據(jù)庫(kù)更改首先會(huì)寫(xiě)入到OS緩存然后才同步到硬盤(pán) – 所以InnoDB緩沖池和OS緩存會(huì)同時(shí)持有一份相同的數(shù)據(jù)。特別是如果你的緩沖池限制為總內(nèi)存的50%,那意味著在寫(xiě)密集的環(huán)境中你可能會(huì)浪費(fèi)高達(dá)50%的內(nèi)存。如果沒(méi)有限制為50%,服務(wù)器可能由于OS緩存的高壓力會(huì)使用到swap。

簡(jiǎn)單地說(shuō),設(shè)置為innodb_flush_method=O_DIRECT。

7.INNODB_BUFFER_POOL_INSTANCES

MySQL 5.5引入了緩沖實(shí)例作為減小內(nèi)部鎖爭(zhēng)用來(lái)提高M(jìn)ySQL吞吐量的手段。

在5.5版本這個(gè)對(duì)提升吞吐量幫助很小,然后在MySQL 5.6版本這個(gè)提升就非常大了,所以在MySQL5.5中你可能會(huì)保守地設(shè)置innodb_buffer_pool_instances=4,在MySQL 5.6和5.7中你可以設(shè)置為8-16個(gè)緩沖池實(shí)例。

你設(shè)置后觀察會(huì)覺(jué)得性能提高不大,但在大多數(shù)高負(fù)載情況下,它應(yīng)該會(huì)有不錯(cuò)的表現(xiàn)。

對(duì)了,不要指望這個(gè)設(shè)置能減少你單個(gè)查詢的響應(yīng)時(shí)間。這個(gè)是在高并發(fā)負(fù)載的服務(wù)器上才看得出區(qū)別。比如多個(gè)線程同時(shí)做許多事情。

8.INNODB_THREAD_CONCURRENCY

InnoDB有一種方法來(lái)控制并行執(zhí)行的線程數(shù) – 我們稱為并發(fā)控制機(jī)制。大部分是由innodb_thread_concurrency值來(lái)控制的。如果設(shè)置為0,并發(fā)控制就關(guān)閉了,因此InnoDB會(huì)立即處理所有進(jìn)來(lái)的請(qǐng)求(盡可能多的)。

在你有32CPU核心且只有4個(gè)請(qǐng)求時(shí)會(huì)沒(méi)什么問(wèn)題。不過(guò)想像下你只有4CPU核心和32個(gè)請(qǐng)求時(shí) – 如果你讓32個(gè)請(qǐng)求同時(shí)處理,你這個(gè)自找麻煩。因?yàn)檫@些32個(gè)請(qǐng)求只有4 CPU核心,顯然地會(huì)比平常慢至少8倍(實(shí)際上是大于8倍),而然這些請(qǐng)求每個(gè)都有自己的外部和內(nèi)部鎖,這有很大可能堆積請(qǐng)求。

下面介紹如何更改這個(gè)變量,在mysql命令行提示符執(zhí)行:

對(duì)于大多數(shù)工作負(fù)載和服務(wù)器,設(shè)置為8是一個(gè)好開(kāi)端,然后你可以根據(jù)服務(wù)器達(dá)到了這個(gè)限制而資源使用率利用不足時(shí)逐漸增加。可以通過(guò)show engine innodb status\G來(lái)查看目前查詢處理情況,查找類(lèi)似如下行:

9.SKIP_NAME_RESOLVE

這一項(xiàng)不得不提及,因?yàn)槿匀挥泻芏嗳藳](méi)有添加這一項(xiàng)。你應(yīng)該添加skip_name_resolve來(lái)避免連接時(shí)DNS解析。

大多數(shù)情況下你更改這個(gè)會(huì)沒(méi)有什么感覺(jué),因?yàn)榇蠖鄶?shù)情況下DNS服務(wù)器解析會(huì)非常快。不過(guò)當(dāng)DNS服務(wù)器失敗時(shí),它會(huì)出現(xiàn)在你服務(wù)器上出現(xiàn)“unauthenticated connections” ,而就是為什么所有的請(qǐng)求都突然開(kāi)始慢下來(lái)了。

所以不要等到這種事情發(fā)生才更改。現(xiàn)在添加這個(gè)變量并且避免基于主機(jī)名的授權(quán)。

10.INNODB_IO_CAPACITY, INNODB_IO_CAPACITY_MAX

* innodb_io_capacity:用來(lái)當(dāng)刷新臟數(shù)據(jù)時(shí),控制MySQL每秒執(zhí)行的寫(xiě)IO量。

* innodb_io_capacity_max: 在壓力下,控制當(dāng)刷新臟數(shù)據(jù)時(shí)MySQL每秒執(zhí)行的寫(xiě)IO量

首先,這與讀取無(wú)關(guān) – SELECT查詢執(zhí)行的操作。對(duì)于讀操作,MySQL會(huì)盡最大可能處理并返回結(jié)果。至于寫(xiě)操作,MySQL在后臺(tái)會(huì)循環(huán)刷新,在每一個(gè)循環(huán)會(huì)檢查有多少數(shù)據(jù)需要刷新,并且不會(huì)用超過(guò)innodb_io_capacity指定的數(shù)來(lái)做刷新操作。這也包括更改緩沖區(qū)合并(在它們刷新到磁盤(pán)之前,更改緩沖區(qū)是輔助臟頁(yè)存儲(chǔ)的關(guān)鍵)。

第二,我需要解釋一下什么叫“在壓力下”,MySQL中稱為”緊急情況”,是當(dāng)MySQL在后臺(tái)刷新時(shí),它需要刷新一些數(shù)據(jù)為了讓新的寫(xiě)操作進(jìn)來(lái)。然后,MySQL會(huì)用到innodb_io_capacity_max。

那么,應(yīng)該設(shè)置innodb_io_capacity和innodb_io_capacity_max為什么呢?

最好的方法是測(cè)量你的存儲(chǔ)設(shè)置的隨機(jī)寫(xiě)吞吐量,然后給innodb_io_capacity_max設(shè)置為你的設(shè)備能達(dá)到的最大IOPS。innodb_io_capacity就設(shè)置為它的50-75%,特別是你的系統(tǒng)主要是寫(xiě)操作時(shí)。

通常你可以預(yù)測(cè)你的系統(tǒng)的IOPS是多少。例如由8 15k硬盤(pán)組成的RAID10能做大約每秒1000隨機(jī)寫(xiě)操作,所以你可以設(shè)置innodb_io_capacity=600和innodb_io_capacity_max=1000。許多廉價(jià)企業(yè)SSD可以做4,000-10,000 IOPS等。

這個(gè)值設(shè)置得不完美問(wèn)題不大。但是,要注意默認(rèn)的200和400會(huì)限制你的寫(xiě)吞吐量,因此你可能偶爾會(huì)捕捉到刷新進(jìn)程。如果出現(xiàn)這種情況,可能是已經(jīng)達(dá)到你硬盤(pán)的寫(xiě)IO吞吐量,或者這個(gè)值設(shè)置得太小限制了吞吐量。

11.INNODB_STATS_ON_METADATA

如果你跑的是MySQL 5.6或5.7,你不需要更改innodb_stats_on_metadata的默認(rèn)值,因?yàn)樗呀?jīng)設(shè)置正確了。

不過(guò)在MySQL 5.5或5.1,強(qiáng)烈建議關(guān)閉這個(gè)變量 – 如果是開(kāi)啟,像命令show table status會(huì)立即查詢INFORMATION_SCHEMA而不是等幾秒再執(zhí)行,這會(huì)使用到額外的IO操作。

從5.1.32版本開(kāi)始,這個(gè)是動(dòng)態(tài)變量,意味著你不需要重啟MySQL服務(wù)器來(lái)關(guān)閉它。

12.INNODB_BUFFER_POOL_DUMP_AT_SHUTDOWN INNODB_BUFFER_POOL_LOAD_AT_STARTUP

innodb_buffer_pool_dump_at_shutdown和innodb_buffer_pool_load_at_startup這兩個(gè)變量與性能無(wú)關(guān),不過(guò)如果你偶爾重啟mysql服務(wù)器(如生效配置),那么就有關(guān)。當(dāng)兩個(gè)都激活時(shí),MySQL緩沖池的內(nèi)容(更具體地說(shuō),是緩存頁(yè))在停止MySQL時(shí)存儲(chǔ)到一個(gè)文件。當(dāng)你下次啟動(dòng)MySQL時(shí),它會(huì)在后臺(tái)啟動(dòng)一個(gè)線程來(lái)加載緩沖池的內(nèi)容以提高預(yù)熱速度到3-5倍。

兩件事:

第一,它實(shí)際上沒(méi)有在關(guān)閉時(shí)復(fù)制緩沖池內(nèi)容到文件,僅僅是復(fù)制表空間ID和頁(yè)面ID – 足夠的信息來(lái)定位硬盤(pán)上的頁(yè)面了。然后它就能以大量的順序讀非常快速的加載那些頁(yè)面,而不是需要成千上萬(wàn)的小隨機(jī)讀。

第二,啟動(dòng)時(shí)是在后臺(tái)加載內(nèi)容,因?yàn)镸ySQL不需要等到緩沖池內(nèi)容加載完成再開(kāi)始接受請(qǐng)求(所以看起來(lái)不會(huì)有什么影響)。

從MySQL 5.7.7開(kāi)始,默認(rèn)只有25%的緩沖池頁(yè)面在mysql關(guān)閉時(shí)存儲(chǔ)到文件,但是你可以控制這個(gè)值 – 使用innodb_buffer_pool_dump_pct,建議75-100。

這個(gè)特性從MySQL 5.6才開(kāi)始支持。

13.INNODB_ADAPTIVE_HASH_INDEX_PARTS

如果你運(yùn)行著一個(gè)大量SELECT查詢的MySQL服務(wù)器(并且已經(jīng)盡可能優(yōu)化),那么自適應(yīng)哈希索引將下你的下一個(gè)瓶頸。自適應(yīng)哈希索引是InnoDB內(nèi)部維護(hù)的動(dòng)態(tài)索引,可以提高最常用的查詢模式的性能。這個(gè)特性可以重啟服務(wù)器關(guān)閉,不過(guò)默認(rèn)下在mysql的所有版本開(kāi)啟。

這個(gè)技術(shù)非常復(fù)雜,在大多數(shù)情況下它會(huì)對(duì)大多數(shù)類(lèi)型的查詢直到加速的作用。不過(guò),當(dāng)你有太多的查詢往數(shù)據(jù)庫(kù),在某一個(gè)點(diǎn)上它會(huì)花過(guò)多的時(shí)間等待AHI鎖和閂鎖。

如果你的是MySQL 5.7,沒(méi)有這個(gè)問(wèn)題 – innodb_adaptive_hash_index_parts默認(rèn)設(shè)置為8,所以自適應(yīng)哈希索引被切割為8個(gè)分區(qū),因?yàn)椴淮嬖谌只コ狻?/p>

不過(guò)在mysql 5.7前的版本,沒(méi)有AHI分區(qū)數(shù)量的控制。換句話說(shuō),有一個(gè)全局互斥鎖來(lái)保護(hù)AHI,可能導(dǎo)致你的select查詢經(jīng)常撞墻。

所以如果你運(yùn)行的是5.1或5.6,并且有大量的select查詢,最簡(jiǎn)單的方案就是切換成同一版本的Percona Server來(lái)激活A(yù)HI分區(qū)。

14.QUERY_CACHE_TYPE

如果人認(rèn)為查詢緩存效果很好,肯定應(yīng)該使用它。好吧,有時(shí)候是有用的。不過(guò)這個(gè)只在你在低負(fù)載時(shí)有用,特別是在低負(fù)載下大多數(shù)是讀取,小量寫(xiě)或者沒(méi)有。

如果是那樣的情況,設(shè)置query_cache_type=ON和query_cache_size=256M就好了。不過(guò)記住不能把256M設(shè)置更高的值了,否則會(huì)由于查詢緩存失效時(shí),導(dǎo)致引起嚴(yán)重的服務(wù)器停頓。

如果你的MySQL服務(wù)器高負(fù)載動(dòng)作,建議設(shè)置query_cache_size=0和query_cache_type=OFF,并重啟服務(wù)器生效。那樣Mysql就會(huì)停止在所有的查詢使用查詢緩存互斥鎖。

15.TABLE_OPEN_CACHE_INSTANCES

從MySQL 5.6.6開(kāi)始,表緩存能分割到多個(gè)分區(qū)。

表緩存用來(lái)存放目前已打開(kāi)表的列表,當(dāng)每一個(gè)表打開(kāi)或關(guān)閉互斥體就被鎖定 – 即使這是一個(gè)隱式臨時(shí)表。使用多個(gè)分區(qū)絕對(duì)減少了潛在的爭(zhēng)用。

從MySQL 5.7.8開(kāi)始,table_open_cache_instances=16是默認(rèn)的配置。

歡迎做Java的工程師朋友們私信我資料免費(fèi)獲取免費(fèi)的Java架構(gòu)學(xué)習(xí)資料(里面有高可用、高并發(fā)、高性能及分布式、Jvm性能調(diào)優(yōu)、Spring源碼,MyBatis,Netty,Redis,Kafka,Mysql,Zookeeper,Tomcat,Docker,Dubbo,Nginx等多個(gè)知識(shí)點(diǎn)的架構(gòu)資料)

其中覆蓋了互聯(lián)網(wǎng)的方方面面,期間碰到各種產(chǎn)品各種場(chǎng)景下的各種問(wèn)題,很值得大家借鑒和學(xué)習(xí),擴(kuò)展自己的技術(shù)廣度和知識(shí)面。

標(biāo)題名稱:mysql變量怎么調(diào),在mysql 中怎么修改數(shù)據(jù)
轉(zhuǎn)載來(lái)源:http://chinadenli.net/article25/dseejji.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站設(shè)計(jì)公司微信小程序網(wǎng)站制作Google網(wǎng)站營(yíng)銷(xiāo)企業(yè)建站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

外貿(mào)網(wǎng)站制作