information_schema系列十一
阿新 • • 發佈:2018-12-15
hold ESS perf ava 復數 效率 add 並且 相關
這幾個表主要就是看我們的壓縮是不是有效,必須有PEOCESS的權限才可以查看這兩張表.
在這剛好補充一下表壓縮的知識:
在創建innodb表時帶上ROW_FORMAT=COMPRESSED參數能夠使用比默認的16K更小的頁。這樣在讀寫時需要更少的I/O,對於SSD磁盤更有價值,頁的大小通過KEY_BLOCK_SIZE參數指定。不同大小的頁意味著需要使用獨立表空間,不能使用系統共享表空間,可以通過innodb_file_per_table指定。KEY_BLOCK_SIZE的值越小,你獲得I/O好處就越多,但是如果因為你指定的值太小,當數據被壓縮到不足夠滿足每頁多行數據記錄時,會產生額外的開銷來重組頁。對於一個表,KEY_BLOCK_SIZE的值有多小是有嚴格的限制的,一般是基於每個索引鍵的長度。有時指定值過小,當create table或者alter table會失敗。
在緩沖池中,被壓縮的數據是存儲在小頁中的,這個小頁的實際大小就是KEY_BLOCK_SIZE的值。為了提取和更新列值,mysql也會在緩沖池中創建一個未壓縮的16k頁。任何更新到未壓縮的頁也需要重新寫入到壓縮的頁,這時你需要估計緩沖池的大小以滿足壓縮和未壓縮的頁,盡管當緩沖空間不足時,未壓縮的頁會被擠出緩沖池。在下次訪問時,不壓縮的頁還會被創建。
看個例子:
但是要註意一點的就是,用這兩個表來收集所有信息的表的時候,是會對性能造成嚴重的影響的,所以說默認是關閉狀態的。如果要打開這個功能的話我們要設置以下參數為ON狀態。
innodb_cmp_per_index_enabled
3: INNODB_CMPMEM_RESET和 INNODB_CMPMEM
這兩個表是存放關於MySQL INNODB的壓縮頁的buffer pool信息。
1: INNODB_CMP 和INNODB_CMP_RESET 這兩個表存儲的是關於壓縮INNODB信息表的時候的相關信息,
Column name | Description |
PAGE_SIZE | Compressed page size in bytes. |
COMPRESS_OPS | Number of times a B-tree page of the size PAGE_SIZE has been compressed. Pages are compressed whenever an empty page is created or the space for the uncompressed modification log runs out. |
COMPRESS_OPS_OK | Number of times a B-tree page of the size PAGE_SIZE has been successfully compressed. This count should never exceed COMPRESS_OPS. |
COMPRESS_TIME | Total time in seconds spent in attempts to compress B-tree pages of the size PAGE_SIZE. |
UNCOMPRESS_OPS | Number of times a B-tree page of the size PAGE_SIZE has been uncompressed. B-tree pages are uncompressed whenever compression fails or at first access when the uncompressed page does not exist in the buffer pool. |
UNCOMPRESS_TIME | Total time in seconds spent in uncompressing B-tree pages of the size PAGE_SIZE. |
SET GLOBAL innodb_file_per_table=1; SET GLOBAL innodb_file_format=Barracuda; CREATE TABLE t1 (c1 INT PRIMARY KEY) ROW_FORMAT=COMPRESSED KEY_BLOCK_SIZE=8;
- 如果你指定ROW_FORMAT=COMPRESSED,那麽可以忽略KEY_BLOCK_SIZE的值,這時使用默認innodb頁的一半,即8kb;
- 如果你指定了KEY_BLOCK_SIZE的值,那麽你可以忽略ROW_FORMAT=COMPRESSED,因為這時會自動啟用壓縮;
- 為了指定最合適KEY_BLOCK_SIZE的值,你可以創建表的多個副本,使用不同的值進行測試,比較他們的.ibd文件的大小;
- KEY_BLOCK_SIZE的值作為一種提示,如必要,Innodb也可以使用一個不同的值。0代表默認壓縮頁的值,Innodb頁的一半。KEY_BLOCK_SIZE的值只能小於等於innodb page size。如果你指定了一個大於innodb page size的值,mysql會忽略這個值然後產生一個警告,這時KEY_BLOCK_SIZE的值是Innodb頁的一半。如果設置了innodb_strict_mode=ON,那麽指定一個不合法的KEY_BLOCK_SIZE的值是返回報錯。
- innodb_compression_level:決定壓縮程度的參數,如果你設置比較大,那麽壓縮比較多,耗費的CPU資源也較多;相反,如果設置較小的值,那麽CPU占用少。默認值6,可以設置0-9
- innodb_compression_failure_threshold_pct:默認值5,範圍0到100.設置中斷點避免高昂的壓縮失敗率。
- innodb_compression_pad_pct_max:指定在每個壓縮頁面可以作為空閑空間的最大比例,該參數僅僅應用在設置了innodb_compression_failure_threshold_pct不為零情況下,並且壓縮失敗率通過了中斷點。默認值50,可以設置範圍是0到75.
alter table test KEY_BLOCK_SIZE=1|2|4|8|16;
設置的越小,壓縮比例就會越大,但是會帶來額外的開銷,一般建議8K.
2:INNODB_CMP_PER_INDEX和INNODB_CMP_PER_INDEX_RESET 這兩個表存儲的是關於壓縮INNODB信息表的時候的相關信息,有關整個表和索引信息都有.我們知道對於一個INNODB壓縮表來說,不管是數據還是二級索引都是會被壓縮的,因為數據本身也可以看作是一個聚集索引.Column name | Description |
DATABASE_NAME | 相關數據庫 |
TABLE_NAME | 監控的壓縮表 |
INDEX_NAME | 索引的名字 |
COMPRESS_OPS | Number of compression operations attempted. Pages are compressed whenever an empty page is created or the space for the uncompressed modification log runs out. |
COMPRESS_OPS_OK | Number of successful compression operations. Subtract from the COMPRESS_OPS value to get the number of compression failures. Divide by the COMPRESS_OPS value to get the percentage of compression failures. |
COMPRESS_TIME | Total amount of CPU time, in seconds, used for compressing data in this index. |
UNCOMPRESS_OPS | Number of uncompression operations performed. Compressed InnoDB pages are uncompressed whenever compression fails, or the first time a compressed page is accessed in the buffer pool and the uncompressed page does not exist. |
UNCOMPRESS_TIME | Total amount of CPU time, in seconds, used for uncompressing data in this index. |
Column name | Description |
PAGE_SIZE | Block size in bytes. Each record of this table describes blocks of this size. |
BUFFER_POOL_INSTANCE | A unique identifier for the buffer pool instance. |
PAGES_USED | Number of blocks of the size PAGE_SIZE that are currently in use. |
PAGES_FREE | Number of blocks of the size PAGE_SIZE that are currently available for allocation. This column shows the external fragmentation in the memory pool. Ideally, these numbers should be at most 1. |
RELOCATION_OPS | Number of times a block of the size PAGE_SIZE has been relocated. The buddy system can relocate the allocated “buddy neighbor”of a freed block when it tries to form a bigger freed block. Reading from the table INNODB_CMPMEM_RESET resets this count. |
RELOCATION_TIME | Total time in microseconds spent in relocating blocks of the size PAGE_SIZE. Reading from the table INNODB_CMPMEM_RESETresets this count. |
information_schema系列十一