国产亚洲精品福利在线无卡一,国产精久久一区二区三区,亚洲精品无码国模,精品久久久久久无码专区不卡

當(dāng)前位置: 首頁(yè) > news >正文

公司網(wǎng)站建設(shè)工作方案口碑營(yíng)銷的特點(diǎn)

公司網(wǎng)站建設(shè)工作方案,口碑營(yíng)銷的特點(diǎn),河南建筑市場(chǎng)一體化平臺(tái),網(wǎng)站首頁(yè)怎么做全屏swf網(wǎng)絡(luò)上有很多MySQL表碎片整理的問題,大多數(shù)是通過demo一個(gè)表然后參考data free來進(jìn)行碎片整理,這種方式對(duì)myisam引擎或者其他引擎可能有效(本人沒有做詳細(xì)的測(cè)試).對(duì)Innodb引擎是不是準(zhǔn)確的,或者data free是不是可以參…

網(wǎng)絡(luò)上有很多MySQL表碎片整理的問題,大多數(shù)是通過demo一個(gè)表然后參考data free來進(jìn)行碎片整理,這種方式對(duì)myisam引擎或者其他引擎可能有效(本人沒有做詳細(xì)的測(cè)試).

對(duì)Innodb引擎是不是準(zhǔn)確的,或者data free是不是可以參考,還是值得商榷的。

本文基于MySQL的Innodb存儲(chǔ)引擎,數(shù)據(jù)庫(kù)版本是8.0.18,對(duì)碎片(fragment)做一個(gè)簡(jiǎn)單的分析,來說明如何量化表的碎片化程度。

涉及的參數(shù)

1,information_schema_stats_expiry

information_schema是一個(gè)基于共享表空間的虛擬數(shù)據(jù)庫(kù),存儲(chǔ)的是一些系統(tǒng)元數(shù)據(jù)信息,某些系統(tǒng)表的數(shù)據(jù)并不是實(shí)時(shí)更新的,具體更新是基于參數(shù)information_schema_stats_expiry。

information_schema_stats_expiry默認(rèn)值是86400秒,也就是24小時(shí),意味著24小時(shí)刷新一次information_schema中的數(shù)據(jù),做測(cè)試的時(shí)候可以設(shè)置為0,實(shí)時(shí)刷新information_schema中的元數(shù)據(jù)信息。

2,innodb_fast_shutdown

因?yàn)橐诖疟P做一些統(tǒng)計(jì),需要將緩存或者redo log中的數(shù)據(jù)在重啟實(shí)例的時(shí)候?qū)崟r(shí)刷入磁盤,這里設(shè)置為0,在重啟數(shù)據(jù)庫(kù)的時(shí)候?qū)⒕彺婊蛘遰edo log實(shí)時(shí)寫入表的物理文件。

3,innodb_stats_persistent_sample_pages

因?yàn)樯婕耙恍┫到y(tǒng)數(shù)據(jù)更新時(shí)對(duì)page的采樣比例,這里設(shè)置為一個(gè)較大的值,為100000,盡可能高比例采樣來生成系統(tǒng)數(shù)據(jù)。

4,innodb_flush_log_at_trx_commit sync_binlog

因?yàn)樯婕按罅繑?shù)據(jù)的寫操作,為加快測(cè)試,關(guān)閉double 1模式。

5,innodb_fill_factor

頁(yè)面填充率保留默認(rèn)的設(shè)置,默認(rèn)值是100

以上涉及的參數(shù)僅針對(duì)本測(cè)試,并不一定代表最優(yōu),同時(shí)測(cè)試過程中(數(shù)據(jù)寫入或者刪除后)會(huì)不斷地重啟實(shí)例,以刷新相對(duì)應(yīng)的物理文件。

碎片的概念

數(shù)據(jù)存儲(chǔ)在文件系統(tǒng)上的時(shí)候,總是不能100%利用分配給它的物理空間:

比如刪除數(shù)據(jù)會(huì)在頁(yè)面上留下一些”空洞”,或者隨機(jī)寫入(聚集索引非線性增加)會(huì)導(dǎo)致頁(yè)分裂,頁(yè)分裂導(dǎo)致頁(yè)面的利用空間少于50%;

另外對(duì)表進(jìn)行增刪改會(huì)引起對(duì)應(yīng)的二級(jí)索引值的隨機(jī)的增刪改,也會(huì)導(dǎo)致索引結(jié)構(gòu)中的數(shù)據(jù)頁(yè)面上留下一些“空洞”;

雖然這些空洞有可能會(huì)被重復(fù)利用,但終究會(huì)導(dǎo)致部分物理空間未被使用,也就是碎片。

同時(shí),即便是設(shè)置了填充因子為100%,Innodb也會(huì)主動(dòng)留下page頁(yè)面1/16的空間作為預(yù)留使用(An innodb_fill_factor setting of 100 leaves 1/16 of the space in clustered index pages free for future index growth.)。

關(guān)系數(shù)據(jù)庫(kù)的存儲(chǔ)結(jié)構(gòu)原理上是類似的,理論上很簡(jiǎn)單,就不過多啰嗦了。碎片是一個(gè)客觀存在的事實(shí)。

創(chuàng)建測(cè)試表以及數(shù)據(jù)

做個(gè)簡(jiǎn)單的測(cè)試,表結(jié)構(gòu)如下,

CREATETABLE `fragment_test` (

`id` INTNOTNULL AUTO_INCREMENT,

`c1` INTNULLDEFAULTNULL,

`c2` INTNULLDEFAULTNULL,

`c3` VARCHAR(50) NULLDEFAULTNULL,

`c4` DATETIME(6) NULLDEFAULTNULL,

PRIMARYKEY (`id`)

);

CREATEINDEX idx_c1 ON fragment_test(c1);

CREATEINDEX idx_c2 ON fragment_test(c2);

CREATEINDEX idx_c3 ON fragment_test(c3);

生成200W測(cè)試數(shù)據(jù)(CALL test_insertdata(2000000);)

CREATE DEFINER=`root`@`%` PROCEDURE `test_insertdata`(

IN `loopcount` INT

)

BEGINdeclare v_uuid varchar(50);

while loopcount>0 do

set v_uuid = uuid();

INSERTINTO fragment_test(c1,c2,c3,c4) VALUES (RAND()*200000000,RAND()*200000000,UUID(),NOW(6));

set loopcount = loopcount -1;

endwhile;

END

查詢語(yǔ)句,參考自最后的鏈接中的文章

SELECT NAME,

TABLE_ROWS,

UPDATE_TIME,

format_bytes(t.data_length) DATA_SIZE,

format_bytes(t.index_length) INDEX_SIZE,

format_bytes(t.data_length+t.index_length) TOTAL_SIZE,

format_bytes(t.data_free) DATA_FREE,

format_bytes(it.FILE_SIZE) FILE_SIZE,

format_bytes((it.FILE_SIZE/10- (t.data_length/10+ t.index_length/10))*10) WASTED_SIZE

FROM information_schema.TABLES as t

JOIN information_schema.INNODB_TABLESPACES as it

ON it.name = concat(table_schema,"/",table_name)

WHERE TABLE_NAME ='fragment_test';

碎片的量化

上面說到數(shù)據(jù)在存儲(chǔ)的時(shí)候,總是無法100%利用物理存儲(chǔ)空間,Innodb甚至?xí)约褐鲃?dòng)預(yù)留一部分空閑的空間(1/16),那么如何衡量一個(gè)表究竟有多少尚未利用的空間?

這里從系統(tǒng)表information_schema.tables和information_schema.innodb_tablespaces,來對(duì)比實(shí)際使用空間和已分配空間來對(duì)比,來間接量化碎片或者說未利用空間的程度。

然后觀察數(shù)據(jù)空間的分配情況,盡管系統(tǒng)表中的數(shù)據(jù)不是完全準(zhǔn)確的,但是也比較接近實(shí)際的200W,系統(tǒng)表顯示1971490,暫時(shí)拋開這一小點(diǎn)誤差。

可以很清楚地看到,數(shù)據(jù)和索引的空間是329MB,文件空間是344MB,DATA_FREE空間是6MB。

隨機(jī)刪除1/4的數(shù)據(jù),也就是50W行(DELETE FROM fragment_test ORDER BY RAND() LIMIT 500000;)

然后重啟實(shí)例,并執(zhí)行分析表(analyze table),繼續(xù)來觀察這個(gè)空間的分配,這里看到,

1,系統(tǒng)表顯示150000行,跟表中的數(shù)據(jù)完全一致(盡管更多的時(shí)候這個(gè)值是一個(gè)大概的值,并不一定準(zhǔn)確,嚴(yán)格說可能非常不準(zhǔn)確,這里歸因于innodb_stats_persistent_sample_pages的設(shè)置)。

2,數(shù)據(jù)文件空間沒有增加(344MB),可以理解,因?yàn)檫@里是刪數(shù)據(jù)操作,所以不用申請(qǐng)空間。

3,刪除了1/4的數(shù)據(jù),數(shù)據(jù)和索引的的大小基本上不變,這里就開始有疑問了,為什么沒有成比例減少?

4,data_free增加了3MB,顯然這不是跟刪除的數(shù)據(jù)成比例增加的

那么怎么理解碎片?DATA_FREE怎么理解?碎片或者說可用空間又怎么衡量?

從200W數(shù)據(jù)中隨機(jī)刪除50W,也就是1/4,表的空間沒有變化,可以肯定的是現(xiàn)在存在大量的碎片或者說可用空間,但是表的總的大小沒變化,data_free也基本上沒有變化到這里就有點(diǎn)說不通了。

那么data free到底是怎么計(jì)算的,看官方的解釋:

The number of allocated but unused bytes.

InnoDB tables report the free space of the tablespace to which the table belongs. For a table located in the shared tablespace, this is the free space of the shared tablespace.

If you are using multiple tablespaces and the table has its own tablespace, the free space is for only that table.

Free space means the number of bytes in completely free extents minus a safety margin. Even if free space displays as 0, it may be possible to insert rows as long as new extents need not be allocated.

data_free的計(jì)算方式或者說條件,是完全空閑的區(qū)(extents,每個(gè)區(qū)1MB,64個(gè)連續(xù)的16 kb 大小的page),只有一個(gè)完全沒有使用的區(qū),才統(tǒng)計(jì)為data_free,因此data_free并不能反映出來真正的空閑空間。

同時(shí)測(cè)試中發(fā)現(xiàn),performance_schema.tables中的table_rows會(huì)受到innodb_stats_persistent_sample_pages的影響,但是data_length和index_length看起來是不會(huì)受innodb_stats_persistent_sample_pages的影響的

這里采樣比例已經(jīng)足夠大,盡管table_rows已經(jīng)是一個(gè)完全準(zhǔn)確的數(shù)字了,但是data_length和index_length卻仍舊是一個(gè)誤差非常大的數(shù)字。

說到這里,那么這個(gè)碎片問題如何衡量?如果只是看performance_schema.tables或者information_schema.INNODB_TABLESPACES,其實(shí)依舊是一個(gè)無解的問題,因?yàn)闊o法通過這些信息,得到一個(gè)相對(duì)準(zhǔn)確的碎片化程度。

其實(shí)在這里(參考鏈接)的評(píng)論中也提到這個(gè)問題,我是比較贊同的。

如果要真正得到碎片程度,其實(shí)還是需要重建表來對(duì)比實(shí)現(xiàn),這里刪除了1/4的數(shù)據(jù),理論上就有大概1/4的可用空間,但是上面的查詢結(jié)果并不能給出一個(gè)明確的答案,怎么驗(yàn)證這個(gè)答案呢?

這里就要粗暴地優(yōu)化表了(optimize table fragment_test+analyze table),優(yōu)化表只是“重整”了碎片,但是系統(tǒng)表的數(shù)據(jù)并沒有更新,因此必須要再執(zhí)行一次分析表 analyze table來更新元數(shù)據(jù)信息

其實(shí)這里也能說明,analyze table只是更新元數(shù)據(jù),如果存儲(chǔ)空間沒有更新(recreated),單純地analyze table也是沒有用的。

對(duì)標(biāo)進(jìn)行optimize和anlayze之后,這里可以看到,物理空間確實(shí)減少了大概1/4的量。

這里其實(shí)就是為了說明一個(gè)問題:Innodb表無法通過data free來判斷表的碎片化程度。

然而這里(參考鏈接)的測(cè)試說明刪除數(shù)據(jù)后data free有明顯的變化,這個(gè)又是為什么,剛特么說無法通過data free來判斷表的碎片化程度,現(xiàn)在又說刪除數(shù)據(jù)后data free有明顯的變化???

其實(shí)(參考鏈接)中有另外一個(gè)比較有意思的測(cè)試,相對(duì)用隨機(jī)刪除的方式,采用連續(xù)刪除的時(shí)候(或者是整個(gè)表的數(shù)據(jù)全部刪除),這個(gè)data free確實(shí)會(huì)相對(duì)準(zhǔn)確地體現(xiàn)出來刪除數(shù)據(jù)后表size的變化情況。

這又是為什么?其實(shí)不難理解,上面已經(jīng)說了,data free的計(jì)算方式,是按照完全“干凈”的區(qū)(extent)來做統(tǒng)計(jì)的,

如果按照聚集索引連續(xù)的方式刪除(相對(duì)隨機(jī)刪除),那些存儲(chǔ)連續(xù)數(shù)據(jù)的區(qū)(extent)是可以完全釋放出來的,這些區(qū)的空間釋放出來之后,會(huì)被認(rèn)為是data free,所以data free此時(shí)又是相對(duì)來說準(zhǔn)確的。

因此,很多測(cè)試,如果想到得到客觀的數(shù)據(jù),需要盡可能多地考慮到對(duì)應(yīng)的場(chǎng)景和測(cè)試數(shù)據(jù)情況。

碎片的衡量

實(shí)際業(yè)務(wù)中,對(duì)表的刪除或者增刪改,很少是按照聚集索引進(jìn)行批量刪除,或者說一旦存在隨機(jī)性的刪除或者更新(頁(yè)分裂),都會(huì)造成一定程度的碎片,而這個(gè)碎片化的程度是無法通過data free來衡量的。

那么又如何衡量這個(gè)碎片程度呢?

1,自己根據(jù)業(yè)務(wù)進(jìn)行預(yù)估,在可接受程度內(nèi)進(jìn)行optimize table,記錄optimize table之后的table size變化程度,來衡量一個(gè)表在一定時(shí)間操作后的碎片化程度,從而來指導(dǎo)是否,或者多久對(duì)該表再次進(jìn)行optimize table

2,采用上述連接中提到的innodb_ruby 這個(gè)工具,直接解析表的物理文件,這種方式相對(duì)來說更加直接。不過這個(gè)工具本人沒來得及測(cè)試,理論上是沒有問題的。

 這里盜用上述鏈接中的圖片,綠色的是實(shí)際使用的空間,中間的黑塊就是所謂的碎片或者說是空洞。

補(bǔ)充:

早上起來,又想到了另外一種case,就是說隨機(jī)刪除后,剩余空間中出現(xiàn)了“空洞”,這些空洞在寫數(shù)據(jù)的時(shí)候,會(huì)不會(huì)被再次利用?

驗(yàn)證其實(shí)很簡(jiǎn)單,寫入200W數(shù)據(jù),隨機(jī)刪除50W后,analyze table更新performance_schema,然后繼續(xù)再寫入50W行的數(shù)據(jù),如果會(huì)利用之前隨機(jī)刪除的空洞空間,那么就不會(huì)重新分配物理空間,否則就會(huì)重新分配物理空間。

因?yàn)榫奂饕腎d是自增的,相當(dāng)于順序?qū)懭?#xff0c;理論上是不會(huì)重用之前刪除留下的空洞的,測(cè)試的結(jié)果還是在預(yù)期之內(nèi)的,重新寫入50W數(shù)據(jù)后,表對(duì)應(yīng)的物理文件會(huì)有一個(gè)很明顯的增加。

http://aloenet.com.cn/news/40069.html

相關(guān)文章:

  • 網(wǎng)站內(nèi)怎么做鏈接站長(zhǎng)查詢站長(zhǎng)工具
  • 長(zhǎng)沙高端網(wǎng)站制作公司上海b2b網(wǎng)絡(luò)推廣外包
  • 網(wǎng)站制作公透明清晰北京seo關(guān)鍵詞優(yōu)化外包
  • 廣州域名企業(yè)網(wǎng)站建站哪家好百度收錄網(wǎng)站需要多久
  • 網(wǎng)站系統(tǒng)的運(yùn)營(yíng)和維護(hù)互聯(lián)網(wǎng)廣告營(yíng)銷是什么
  • 商城建設(shè)網(wǎng)站的原因網(wǎng)站優(yōu)化課程
  • 蘭州微網(wǎng)站重慶網(wǎng)站seo費(fèi)用
  • 衡水建站公司seo用什么論壇引流
  • 谷歌優(yōu)化和谷歌競(jìng)價(jià)的區(qū)別重慶可靠的關(guān)鍵詞優(yōu)化研發(fā)
  • 做網(wǎng)站編程用什么語(yǔ)言好seo怎么做最佳
  • 外國(guó)人學(xué)做中國(guó)菜的網(wǎng)站營(yíng)銷網(wǎng)站做的好的公司
  • 網(wǎng)上做家教兼職哪個(gè)網(wǎng)站南昌百度快速排名提升
  • 網(wǎng)站開發(fā)經(jīng)常遇到的問題大一html網(wǎng)頁(yè)制作作業(yè)簡(jiǎn)單
  • 南京模板建網(wǎng)站哪家好百度一下官網(wǎng)
  • 聊大 網(wǎng)站設(shè)計(jì)seo優(yōu)化主要做什么
  • 太倉(cāng)建設(shè)銀行網(wǎng)站搜索指數(shù)查詢
  • 劉琪 找誰(shuí)做網(wǎng)站靠譜東莞網(wǎng)絡(luò)營(yíng)銷全網(wǎng)推廣
  • 做網(wǎng)站怎么做鼠標(biāo)跟隨2023很有可能再次封城嗎
  • 網(wǎng)站經(jīng)營(yíng)與建設(shè)優(yōu)化大師軟件下載
  • 網(wǎng)上有做口譯的網(wǎng)站么官方進(jìn)一步優(yōu)化
  • 彩票代購(gòu)網(wǎng)站建設(shè)百度怎么注冊(cè)自己的店鋪
  • 做電影平臺(tái)網(wǎng)站怎么賺錢的什么是網(wǎng)絡(luò)營(yíng)銷平臺(tái)
  • wordpress主頁(yè)居中重慶seo俱樂部
  • 焦作專業(yè)做網(wǎng)站公司中國(guó)新聞發(fā)布
  • wordpress 個(gè)性化韶山百度seo
  • 桐鄉(xiāng)網(wǎng)站建設(shè)世界十大網(wǎng)站排名出爐
  • 高明專業(yè)網(wǎng)站建設(shè)報(bào)價(jià)青海百度關(guān)鍵詞seo
  • 網(wǎng)站制作需要平臺(tái)培訓(xùn)心得體會(huì)總結(jié)
  • 網(wǎng)站建設(shè)專企業(yè)站seo價(jià)格
  • 網(wǎng)站建設(shè)種類 優(yōu)幫云海外網(wǎng)站推廣優(yōu)化專員