以MySQL 8.0 來說,通過查看 8.0 的官方文檔得知,8.0 的臨時表空間分為會話臨時表空間和全局臨時表空間,會話臨時表空間存儲用戶創(chuàng)建的臨時表和當(dāng) InnoDB 配置為磁盤內(nèi)部臨時表的存儲引擎時由優(yōu)化器創(chuàng)建的內(nèi)部臨時表,當(dāng)會話斷開連接時,其臨時表空間將被截斷并釋放回池中;也就是說,在 8.0 中有一個專門的會話臨時表空間,當(dāng)會話被殺掉后,可以回收磁盤空間;而原來的 ibtmp1 是現(xiàn)在的全局臨時表空間,存放的是對用戶創(chuàng)建的臨時表進(jìn)行更改的回滾段,在 5.7 中 ibtmp1 存放的是用戶創(chuàng)建的臨時表和磁盤內(nèi)部臨時表;
創(chuàng)新互聯(lián)建站成立與2013年,是專業(yè)互聯(lián)網(wǎng)技術(shù)服務(wù)公司,擁有項目網(wǎng)站建設(shè)、成都網(wǎng)站建設(shè)網(wǎng)站策劃,項目實施與項目整合能力。我們以讓每一個夢想脫穎而出為使命,1280元浦東做網(wǎng)站,已為上家服務(wù),為浦東各地企業(yè)和個人服務(wù),聯(lián)系電話:18982081108
也就是在 8.0 和 5.7 中 ibtmp1 的用途發(fā)生了變化,5.7 版本臨時表的數(shù)據(jù)存放在 ibtmp1 中,在 8.0 版本中臨時表的數(shù)據(jù)存放在會話臨時表空間,如果臨時表發(fā)生更改,更改的 undo 數(shù)據(jù)存放在 ibtmp1 中;
實驗驗證:將之前的查詢結(jié)果保存成臨時表,對應(yīng)會話是 45 號,通過查看對應(yīng)字典表,可知 45 號會話使用了 temp_8.ibt 這個表空間,通過把查詢保存成臨時表,可以用到會話臨時表空間,如下圖:
下一步殺掉 45 號會話,發(fā)現(xiàn) temp_8.ibt 空間釋放了,變?yōu)榱顺跏即笮?,狀態(tài)為非活動的,證明在 mysql8.0 中可以通過殺掉會話來釋放臨時表空間。
總結(jié):在 mysql5.7 時,殺掉會話,臨時表會釋放,但是僅僅是在 ibtmp 文件里標(biāo)記一下,空間是不會釋放回操作系統(tǒng)的。如果要釋放空間,需要重啟數(shù)據(jù)庫;在 mysql8.0 中可以通過殺掉會話來釋放臨時表空間。
加入兩臺mysql,以前的規(guī)則是key%2 == 0 進(jìn)入庫1,key%2 == 1 進(jìn)入庫2。在擴容方案中,可以將mysql配置信息修改為:庫1的主從作為兩臺機器,庫2同理,這樣key%4 == 0 和==2進(jìn)入庫1,key%4 == 1或3進(jìn)入庫2。然后再做數(shù)據(jù)的清除工作。
數(shù)據(jù)庫優(yōu)化一方面是找出系統(tǒng)的瓶頸,提高M(jìn)ySQL數(shù)據(jù)庫的整體性能,而另一方面需要合理的結(jié)構(gòu)設(shè)計和參數(shù)調(diào)整,以提高用戶的相應(yīng)速度,同時還要盡可能的節(jié)約系統(tǒng)資源,以便讓系統(tǒng)提供更大的負(fù)荷.
1. 優(yōu)化一覽圖
2. 優(yōu)化
筆者將優(yōu)化分為了兩大類,軟優(yōu)化和硬優(yōu)化,軟優(yōu)化一般是操作數(shù)據(jù)庫即可,而硬優(yōu)化則是操作服務(wù)器硬件及參數(shù)設(shè)置.
2.1 軟優(yōu)化
2.1.1 查詢語句優(yōu)化
1.首先我們可以用EXPLAIN或DESCRIBE(簡寫:DESC)命令分析一條查詢語句的執(zhí)行信息.
2.例:
顯示:
其中會顯示索引和查詢數(shù)據(jù)讀取數(shù)據(jù)條數(shù)等信息.
2.1.2 優(yōu)化子查詢
在MySQL中,盡量使用JOIN來代替子查詢.因為子查詢需要嵌套查詢,嵌套查詢時會建立一張臨時表,臨時表的建立和刪除都會有較大的系統(tǒng)開銷,而連接查詢不會創(chuàng)建臨時表,因此效率比嵌套子查詢高.
2.1.3 使用索引
索引是提高數(shù)據(jù)庫查詢速度最重要的方法之一,關(guān)于索引可以參高筆者M(jìn)ySQL數(shù)據(jù)庫索引一文,介紹比較詳細(xì),此處記錄使用索引的三大注意事項:
2.1.4 分解表
對于字段較多的表,如果某些字段使用頻率較低,此時應(yīng)當(dāng),將其分離出來從而形成新的表,
2.1.5 中間表
對于將大量連接查詢的表可以創(chuàng)建中間表,從而減少在查詢時造成的連接耗時.
2.1.6 增加冗余字段
類似于創(chuàng)建中間表,增加冗余也是為了減少連接查詢.
2.1.7 分析表,,檢查表,優(yōu)化表
分析表主要是分析表中關(guān)鍵字的分布,檢查表主要是檢查表中是否存在錯誤,優(yōu)化表主要是消除刪除或更新造成的表空間浪費.
1. 分析表: 使用 ANALYZE 關(guān)鍵字,如ANALYZE TABLE user;
2. 檢查表: 使用 CHECK關(guān)鍵字,如CHECK TABLE user [option]
option 只對MyISAM有效,共五個參數(shù)值:
3. 優(yōu)化表:使用OPTIMIZE關(guān)鍵字,如OPTIMIZE [LOCAL|NO_WRITE_TO_BINLOG] TABLE user;
LOCAL|NO_WRITE_TO_BINLOG都是表示不寫入日志.,優(yōu)化表只對VARCHAR,BLOB和TEXT有效,通過OPTIMIZE TABLE語句可以消除文件碎片,在執(zhí)行過程中會加上只讀鎖.
2.2 硬優(yōu)化
2.2.1 硬件三件套
1.配置多核心和頻率高的cpu,多核心可以執(zhí)行多個線程.
2.配置大內(nèi)存,提高內(nèi)存,即可提高緩存區(qū)容量,因此能減少磁盤I/O時間,從而提高響應(yīng)速度.
3.配置高速磁盤或合理分布磁盤:高速磁盤提高I/O,分布磁盤能提高并行操作的能力.
2.2.2 優(yōu)化數(shù)據(jù)庫參數(shù)
優(yōu)化數(shù)據(jù)庫參數(shù)可以提高資源利用率,從而提高M(jìn)ySQL服務(wù)器性能.MySQL服務(wù)的配置參數(shù)都在my.cnf或my.ini,下面列出性能影響較大的幾個參數(shù).
2.2.3 分庫分表
因為數(shù)據(jù)庫壓力過大,首先一個問題就是高峰期系統(tǒng)性能可能會降低,因為數(shù)據(jù)庫負(fù)載過高對性能會有影響。另外一個,壓力過大把你的數(shù)據(jù)庫給搞掛了怎么辦?所以此時你必須得對系統(tǒng)做分庫分表 + 讀寫分離,也就是把一個庫拆分為多個庫,部署在多個數(shù)據(jù)庫服務(wù)上,這時作為主庫承載寫入請求。然后每個主庫都掛載至少一個從庫,由從庫來承載讀請求。
2.2.4 緩存集群
如果用戶量越來越大,此時你可以不停的加機器,比如說系統(tǒng)層面不停加機器,就可以承載更高的并發(fā)請求。然后數(shù)據(jù)庫層面如果寫入并發(fā)越來越高,就擴容加數(shù)據(jù)庫服務(wù)器,通過分庫分表是可以支持?jǐn)U容機器的,如果數(shù)據(jù)庫層面的讀并發(fā)越來越高,就擴容加更多的從庫。但是這里有一個很大的問題:數(shù)據(jù)庫其實本身不是用來承載高并發(fā)請求的,所以通常來說,數(shù)據(jù)庫單機每秒承載的并發(fā)就在幾千的數(shù)量級,而且數(shù)據(jù)庫使用的機器都是比較高配置,比較昂貴的機器,成本很高。如果你就是簡單的不停的加機器,其實是不對的。所以在高并發(fā)架構(gòu)里通常都有緩存這個環(huán)節(jié),緩存系統(tǒng)的設(shè)計就是為了承載高并發(fā)而生。所以單機承載的并發(fā)量都在每秒幾萬,甚至每秒數(shù)十萬,對高并發(fā)的承載能力比數(shù)據(jù)庫系統(tǒng)要高出一到兩個數(shù)量級。所以你完全可以根據(jù)系統(tǒng)的業(yè)務(wù)特性,對那種寫少讀多的請求,引入緩存集群。具體來說,就是在寫數(shù)據(jù)庫的時候同時寫一份數(shù)據(jù)到緩存集群里,然后用緩存集群來承載大部分的讀請求。這樣的話,通過緩存集群,就可以用更少的機器資源承載更高的并發(fā)。
一個完整而復(fù)雜的高并發(fā)系統(tǒng)架構(gòu)中,一定會包含:各種復(fù)雜的自研基礎(chǔ)架構(gòu)系統(tǒng)。各種精妙的架構(gòu)設(shè)計.因此一篇小文頂多具有拋磚引玉的效果,但是數(shù)據(jù)庫優(yōu)化的思想差不多就這些了.
前天我剛回答了相似的問題你參考一下
1.導(dǎo)出4.0.23當(dāng)前數(shù)據(jù)庫數(shù)據(jù),進(jìn)行備份。
2.安裝4.1或5.1進(jìn)行備份數(shù)據(jù)導(dǎo)入。
3.具體操作
linux中升級MySQL應(yīng)采取的步驟:
1. 進(jìn)行升級前你應(yīng)先備份當(dāng)前的MySQL安裝。
2. 下載最新linux版MySQL。
3. 升級MySQL前,必須停止服務(wù)器。
如果服務(wù)器安裝為服務(wù),必須在命令提示符下在命令行中用命令停止服務(wù):
4.當(dāng)從以前至的4.0.23版本升級到4.1或5.1時,或從Zip文件安裝的MySQL升級到MySQL Installation Wizard(安裝幫助)安裝的MySQL時,你必須手動卸載前面安裝的MySQL服務(wù)。
如果你不想卸載已有的服務(wù),MySQL Installation Wizard(安裝幫助)則不會正確安裝新的MySQL服務(wù)。
5. 如果你使用MySQL Installation Wizard(安裝幫助),請參考“使用MySQL安裝向?qū)А钡拿枋鰜韱訋椭?/p>
6. 如果用Zip文件安裝MySQL,應(yīng)提取文件。你可以覆蓋已有的MySQL安裝,建議覆蓋原有的安裝。
7. 重新啟動服務(wù)器。
MySQL數(shù)據(jù)庫系統(tǒng)可以支持許多不同的數(shù)據(jù)庫,通常,每個應(yīng)用程序需要一個數(shù)據(jù)庫。
在Book-O-Rama例子中,數(shù)據(jù)庫名為books。
創(chuàng)建數(shù)據(jù)庫是最容易的部分。在mySQL命令提示符下,輸入如下所示命令:
MySQLcreate datebase dbname;
應(yīng)該用所希望的數(shù)據(jù)庫名稱來代替"dbname"字符串。
在Book-O-Rama例子中,要創(chuàng)建一個名為books的數(shù)據(jù)庫。
就這樣應(yīng)該會看到如下所示的響應(yīng)(執(zhí)行時間會因為機器不同而不同):
Query ok,1 row affected(0.0 sec)
如果出現(xiàn)上訴字段意味著一切正常。
如果沒有得到響應(yīng),請確認(rèn)在上面的命令行后面輸入分號,分號將告訴mySQL已經(jīng)完成了命令輸入,該執(zhí)行命令了。
可以啊,你可以把不會關(guān)聯(lián)不大的數(shù)據(jù)分離開,比述說客戶數(shù)據(jù)跟物品數(shù)據(jù)分別部署在兩個數(shù)據(jù)庫中,這樣完全可以訪問啊。。。