免费观看又色又爽又黄的小说免费_美女福利视频国产片_亚洲欧美精品_美国一级大黄大色毛片

mysql碎片怎么整理,mysql數(shù)據(jù)庫(kù)碎片

MySQL緩存

mysql 開(kāi)啟查詢緩存可以有兩種方法來(lái)開(kāi)啟一種是使用set命令來(lái)進(jìn)行開(kāi)啟,另一種是直接修改my.ini文件來(lái)直接設(shè)置都是非常的簡(jiǎn)單的哦。

10年積累的網(wǎng)站建設(shè)、成都網(wǎng)站設(shè)計(jì)經(jīng)驗(yàn),可以快速應(yīng)對(duì)客戶對(duì)網(wǎng)站的新想法和需求。提供各種問(wèn)題對(duì)應(yīng)的解決方案。讓選擇我們的客戶得到更好、更有力的網(wǎng)絡(luò)服務(wù)。我雖然不認(rèn)識(shí)你,你也不認(rèn)識(shí)我。但先網(wǎng)站制作后付款的網(wǎng)站建設(shè)流程,更有城關(guān)免費(fèi)網(wǎng)站建設(shè)讓你可以放心的選擇與我們合作。

開(kāi)啟緩存,設(shè)置緩存大小,具體實(shí)施如下:

windows下是my.ini,linux下是my.cnf;

在配置文件的最后追加上:

需要重啟mysql生效;

b) 開(kāi)啟緩存,兩種方式:

a)使用mysql命令:

如果報(bào)錯(cuò):

Query cache is disabled; restart the server with query_cache_type=1 to enable it,還是老老實(shí)實(shí)的該配置文件,然后重啟吧,原因如下:

查看是否設(shè)置成功

show variables like "%query_cache%" 查看是否設(shè)置成功:

當(dāng)然如果你的數(shù)據(jù)表有更新怎么辦,沒(méi)關(guān)系mysql默認(rèn)會(huì)和這個(gè)表有關(guān)系的緩存刪掉,下次查詢的時(shí)候會(huì)直接讀表然后再緩存

下面是一個(gè)簡(jiǎn)單的例子:

以上的相關(guān)內(nèi)容就是對(duì)mysql緩存查詢和設(shè)置的介紹,望你能有所收獲。

一般,我們會(huì)把 query_cache_type 設(shè)置為 ON,默認(rèn)情況下應(yīng)該是ON

query_cache_type有3個(gè)值 0代表關(guān)閉查詢緩存OFF,1代表開(kāi)啟ON,2(DEMAND)代表當(dāng)sql語(yǔ)句中有SQL_CACHE關(guān)鍵詞時(shí)才緩存,如:

這樣 當(dāng)我們執(zhí)行 select id,name from tableName; 這樣就會(huì)用到查詢緩存。

①在 query_cache_type 打開(kāi)的情況下,如果你不想使用緩存,需要指明

select sql_no_cache id,name from tableName;

②當(dāng)sql中用到mysql函數(shù),也不會(huì)緩存

當(dāng)然也可以禁用查詢緩存: mysql set session query_cache_type=off;

上面的顯示,表示設(shè)置查詢緩存是可用的。

表示查詢緩存大小,也就是分配內(nèi)存大小給查詢緩存,如果你分配大小為0,

那么 第一步 和 第二步 起不到作用,還是沒(méi)有任何效果。

上面是 mysql6.0設(shè)置默認(rèn)的,之前的版本好像默認(rèn)是0的,那么就要自己設(shè)置下。

設(shè)置

這里是設(shè)置1M左右,900多K。

再次查看下:

顯示我們?cè)O(shè)置新的大小,表示設(shè)置成功。

例如: 如果查詢結(jié)果很大, 也緩存????這個(gè)明顯是不可能的。

MySql 可以設(shè)置一個(gè)最大的緩存值,當(dāng)你查詢緩存數(shù)結(jié)果數(shù)據(jù)超過(guò)這個(gè)值就不會(huì)

進(jìn)行緩存。缺省為1M,也就是超過(guò)了1M查詢結(jié)果就不會(huì)緩存。

這個(gè)是默認(rèn)的數(shù)值,如果需要修改,就像設(shè)置緩存大小一樣設(shè)置,使用set

重新指定大小。

好了,通過(guò)4個(gè)步驟就可以 打開(kāi)了查詢緩存,具體值的大小和查詢的方式 這個(gè)因不同

的情況來(lái)指定了。

mysql查詢緩存相關(guān)變量

MySQL 提供了一系列的 Global Status 來(lái)記錄 Query Cache 的當(dāng)前狀態(tài),具體如下:

Qcache_free_blocks:目前還處于空閑狀態(tài)的 Query Cache 中內(nèi)存 Block 數(shù)目

Qcache_free_memory:目前還處于空閑狀態(tài)的 Query Cache 內(nèi)存總量

Qcache_hits:Query Cache 命中次數(shù)

Qcache_inserts:向 Query Cache 中插入新的 Query Cache 的次數(shù),也就是沒(méi)有命中的次數(shù)

Qcache_lowmem_prunes:當(dāng) Query Cache 內(nèi)存容量不夠,需要從中刪除老的 Query Cache 以給新的 Cache 對(duì)象使用的次數(shù)

Qcache_not_cached:沒(méi)有被 Cache 的 SQL 數(shù),包括無(wú)法被 Cache 的 SQL 以及由于 query_cache_type 設(shè)置的不會(huì)被 Cache 的 SQL

Qcache_queries_in_cache:目前在 Query Cache 中的 SQL 數(shù)量

Qcache_total_blocks:Query Cache 中總的 Block 數(shù)量

檢查是否從查詢緩存中受益的最簡(jiǎn)單的辦法就是檢查緩存命中率

當(dāng)服務(wù)器收到SELECT 語(yǔ)句的時(shí)候,Qcache_hits 和Com_select 這兩個(gè)變量會(huì)根據(jù)查詢緩存

的情況進(jìn)行遞增

查詢緩存命中率的計(jì)算公式是:Qcache_hits/(Qcache_hits + Com_select)。

query_cache_min_res_unit的配置是一柄”雙刃劍”,默認(rèn)是4KB,設(shè)置值大對(duì)大數(shù)據(jù)查詢有好處,但如果你的查詢都是小數(shù)據(jù) 查詢,就容易造成內(nèi)存碎片和浪費(fèi)。

查詢緩存碎片率 = Qcache_free_blocks / Qcache_total_blocks * 100%

如果查詢緩存碎片率超過(guò)20%,可以用FLUSH QUERY CACHE整理緩存碎片,或者試試減小query_cache_min_res_unit,如果你的查詢都是小數(shù)據(jù)量的話。

查詢緩存利用率 = (query_cache_size - Qcache_free_memory) / query_cache_size * 100%

查詢緩存利用率在25%以下的話說(shuō)明query_cache_size設(shè)置的過(guò)大,可適當(dāng)減小;查詢緩存利用率在80%以上而且 Qcache_lowmem_prunes 50的話說(shuō)明query_cache_size可能有點(diǎn)小,要不就是碎片太多。

查詢緩存命中率 = (Qcache_hits - Qcache_inserts) / Qcache_hits * 100%

示例服務(wù)器 查詢緩存碎片率 = 20.46%,查詢緩存利用率 = 62.26%,查詢緩存命中率 = 1.94%,命中率很差,可能寫(xiě)操作比較頻繁吧,而且可能有些碎片。

查詢緩存可以看做是SQL文本和查詢結(jié)果的映射。如果第二次查詢的SQL和第一次查詢的SQL完全相同(注意必須是完全相同,即使多一個(gè)空格或者大小寫(xiě)不同都認(rèn)為不同)且開(kāi)啟了查詢緩存,那么第二次查詢就直接從查詢緩存中取結(jié)果,可以通過(guò)下面的SQL來(lái)查看緩存命中次數(shù)(是個(gè)累加值):

另外即使完全相同的SQL,如果使用不同的字符集、不同的協(xié)議等也會(huì)被認(rèn)為是不同的查詢而分別進(jìn)行緩存。

在表的結(jié)構(gòu)或數(shù)據(jù)發(fā)生改變時(shí),查詢緩存中的數(shù)據(jù)不再有效。有這些INSERT、UPDATE、 DELETE、TRUNCATE、ALTER TABLE、DROP TABLE或DROP DATABASE會(huì)導(dǎo)致緩存數(shù)據(jù)失效。所以查詢緩存適合有大量相同查詢的應(yīng)用,不適合有大量數(shù)據(jù)更新的應(yīng)用。

可以使用下面三個(gè)SQL來(lái)清理查詢緩存:

1、FLUSH QUERY CACHE; // 清理查詢緩存內(nèi)存碎片。

2、RESET QUERY CACHE; // 從查詢緩存中移出所有查詢。

3、FLUSH TABLES; //關(guān)閉所有打開(kāi)的表,同時(shí)該操作將會(huì)清空查詢緩存中的內(nèi)容。

Query Cache是MySQL Server層的一個(gè)非常好的特性,對(duì)于小數(shù)據(jù)集或訪問(wèn)量非常集中的應(yīng)用場(chǎng)景,有非常好的性能提升,但是Query Cache引入了一些新的問(wèn)題,而且大部分場(chǎng)景下比較雞肋,官方打算棄用了

參考:

MySQL 5.6 整理表的碎片

可以看到,當(dāng)前表的碎片率超高了,50.6%。

有三種辦法整理碎片

這三種操作都是先創(chuàng)建一個(gè)臨時(shí)表復(fù)制完成后再刪除舊表,所以在執(zhí)行操作的過(guò)程中磁盤會(huì)先增大。

會(huì)鎖表

會(huì)鎖表

pt-online-schema-change - ALTER tables 無(wú)需鎖表。

整理結(jié)果很明顯,整理后碎片率0.3%。

這里有幾個(gè)參數(shù)需要介紹一下:

--dry-run

這個(gè)參數(shù)不建立觸發(fā)器,不拷貝數(shù)據(jù),也不會(huì)替換原表。只是創(chuàng)建和更改新表。

--execute

表明你已經(jīng)閱讀了文檔,并且確認(rèn)要 alter the table。你必須配置這個(gè)參數(shù)來(lái) alter the table。如果你不配置,那么工具將只進(jìn)行一些安全檢查然后就退出了。這幫助確保你已經(jīng)閱讀了文檔,并且了解如何使用該工具。如果你沒(méi)有閱讀這些文檔,那么不會(huì)設(shè)置該參數(shù)。

--critical-load

每次chunk操作前后,會(huì)根據(jù)show global status統(tǒng)計(jì)指定的狀態(tài)量的變化,默認(rèn)是統(tǒng)計(jì)Thread_running。目的是為了安全,防止原始表上的觸發(fā)器引起負(fù)載過(guò)高。這也是為了防止在線DDL對(duì)線上的影響。超過(guò)設(shè)置的閥值,就會(huì)終止操作,在線DDL就會(huì)中斷。提示的異常如上報(bào)錯(cuò)信息。

--max-lag

type: time; default: 1s

lag 滯后偏移

暫停數(shù)據(jù)拷貝,直到所有replicas的lag值低于該值。在每個(gè) data-copy query (each chunk)后,工具會(huì)通過(guò)Seconds_Behind_Master查詢所有replica的 replication lag 。如果任何replica lag大于該值,那么工具會(huì)sleep --check-interval 秒,然后再次檢查所有replica。如果你指定 --check-slave-lag ,那么工具會(huì)檢查那臺(tái)server,而不是所有server。如果你想控制哪個(gè)提供工具的監(jiān)控,配置DSN值 --recursion-method 。

工具會(huì)等待直到replicas停止lagging。如果任一replica停止,工具會(huì)一直處于等待狀態(tài)直到該replica啟動(dòng)。 在所有replicas運(yùn)行并且lagging不大的情況下,數(shù)據(jù)拷貝繼續(xù)。

工具在等待的時(shí)候,會(huì)打印進(jìn)程報(bào)告。如果replica停止了,會(huì)立即打印進(jìn)程報(bào)告,然后在每個(gè)進(jìn)程報(bào)告期間重復(fù)。

--check-interval

type: time; default: 1

Sleep time between checks for --max-lag .

--max-load

選項(xiàng)定義一個(gè)閥值,在每次chunk操作后,查看show global status狀態(tài)值是否高于指定的閥值。該參數(shù)接受一個(gè)mysql status狀態(tài)變量以及一個(gè)閥值,如果沒(méi)有給定閥值,則定義一個(gè)閥值為為高于當(dāng)前值的20%。注意這個(gè)參數(shù)不會(huì)像--critical-load終止操作,而只是暫停操作。當(dāng)status值低于閥值時(shí),則繼續(xù)往下操作。是暫停還是終止操作這是--max-load和--critical-load的差別。

--charset

簡(jiǎn)寫(xiě): -A; type: string

設(shè)置默認(rèn)字符集。如果值為 utf8,設(shè)置 Perl’s binmode on STDOUT to utf8,傳送 mysql_enable_utf8 參數(shù)到 DBD::mysql,然后在連接到MySQL后運(yùn)行 SET NAMES UTF8 。其他的值也是在STDOUT設(shè)置 binmode,然后在連到MySQL后運(yùn)行 SET NAMES 。

--check-replication-filters

檢查復(fù)制中是否設(shè)置了過(guò)濾條件,如果設(shè)置了,程序?qū)⑼顺?/p>

--nocheck-replication-filters

不檢查復(fù)制中是否設(shè)置了過(guò)濾條件

--set-vars

設(shè)置mysql的變量值

--check-slave-lag

檢查主從延遲

--no-version-check

不檢查版本,在阿里云服務(wù)器中一般加入此參數(shù),否則會(huì)報(bào)錯(cuò)

MySQL—碎片整理

刪除數(shù)據(jù)必然會(huì)在數(shù)據(jù)文件中造成不連續(xù)的空白空間,而當(dāng)插入數(shù)據(jù)時(shí),這些空白空間則會(huì)被利用起來(lái).于是造成了數(shù)據(jù)的存儲(chǔ)位置不連續(xù),以及物理存儲(chǔ)順序與理論上的排序順序不同,這種是數(shù)據(jù)碎片.實(shí)際上數(shù)據(jù)碎片分為兩種,一種是單行數(shù)據(jù)碎片,另一種是多行數(shù)據(jù)碎片.前者的意思就是一行數(shù)據(jù),被分成N個(gè)片段,存儲(chǔ)在N個(gè)位置.后者的就是多行數(shù)據(jù)并未按照邏輯上的順序排列.當(dāng)有大量的刪除和插入操作時(shí),必然會(huì)產(chǎn)生很多未使用的空白空間,這些空間就是多出來(lái)的額外空間.索引也是文件數(shù)據(jù),所以也會(huì)產(chǎn)生索引碎片,理由同上,大概就是順序紊亂的問(wèn)題.Engine 不同,OPTIMIZE 的操作也不一樣的,MyISAM 因?yàn)樗饕蛿?shù)據(jù)是分開(kāi)的,所以 OPTIMIZE 可以整理數(shù)據(jù)文件,并重排索引。這樣不但會(huì)浪費(fèi)空間,并且查詢速度也更慢。

查看碎片信息:

Index_length 代表索引的總量

Data_free 代表碎片數(shù)量

從information_schema中獲取信息:

碎片整理:

過(guò)程時(shí)間長(zhǎng)短取決于表大小和碎片多少,

返回結(jié)果optimize status OK則整理完成;

文章名稱:mysql碎片怎么整理,mysql數(shù)據(jù)庫(kù)碎片
分享路徑:http://m.newbst.com/article22/dssspjc.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供軟件開(kāi)發(fā)、商城網(wǎng)站標(biāo)簽優(yōu)化、品牌網(wǎng)站建設(shè)、網(wǎng)站建設(shè)、做網(wǎng)站

廣告

聲明:本網(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)

網(wǎng)站托管運(yùn)營(yíng)