久久精品人人爽,华人av在线,亚洲性视频网站,欧美专区一二三

MySQL5.7中有哪些新特性

196次閱讀
沒有評論

共計 2940 個字符,預計需要花費 8 分鐘才能閱讀完成。

本篇內容主要講解“MySQL5.7 中有哪些新特性”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓丸趣 TV 小編來帶大家學習“MySQL5.7 中有哪些新特性”吧!

1、介紹

mysql5.7 中,innodb 頁結構增加了一個類型 FIL_PAGE_COMPRESSED,用來完成 Transparent page compression 特性

2、說明

1)壓縮內容包括:除去 FIL_PAGE_DATA 外所有數據,包括 tail
2)壓縮后的內容 +FIL_PAGE_DATA 會以 block_size 對齊,并將空洞清 0。意味著將 16K 壓縮到 9K,也需要 12KB 的數據,因此將 block_size 設小點,這樣的場景將受益,可以
    減少空間浪費。
3)FIL_PAGE_VERSION 內容存 1;FIL_PAGE_ALGORITHM_V1 指哪個壓縮算法:ZLIB、LZ4
   FIL_PAGE_ORIGINAL_TYPE_V1:原始頁類型;
   FIL_PAGE_ORIGINAL_SIZE_V1:原始頁需要壓縮的內容大小
   FIL_PAGE_COMPRESS_SIZE_V1:內容壓縮后大小
4)目前支持 2 種壓縮算法:zlib 和 lz4,可以方便擴展新的算法
5)壓縮只是在持久化磁盤的時候壓縮,內存中的頁仍然是原始的樣子

3、用法

表定義:
可以通過 CREATE TABLE、ALTER TABLE 來定義壓縮表:
  create table t1(i int,b blob) compression= zlib
也可以選擇 compression= lz4 來指定 lz4 壓縮算法,注意 compression 屬性的 ALTER 是立即生效,在做完 ALTER COMPRESSION 屬性操作后,需要做一次表的 rebuild,例如 optimize table 操作,才能對已有的數據做 punch hole。compression 屬性存儲在 frm 文件中,以 2 個字節存儲字符串長度,隨后存儲 compression 屬性定義字符串,這也是一個操作系統降級的風險點。

4、代碼分析

點擊 (此處) 折疊或打開

static

byte*

os_file_compress_page(

 Compression compression,

 ulint block_size,// 文件系統 block 大小。通常 4K

 byte* src,// 需要壓縮頁的指針

 ulint src_len,// 頁大小

 byte* dst,// 壓縮后,存入目標

 ulint* dst_len)// 壓縮內存長度

{

 ulint len = 0;

 ulint compression_level = page_zip_level;

 ulint page_type = mach_read_from_2(src + FIL_PAGE_TYPE);

 // 如果要節省空間,頁大小至少是文件系統 block 的 2 倍。壓縮的頁不包括 R -tree 頁

 if (page_type == FIL_PAGE_RTREE

  || block_size == ULINT_UNDEFINED

  || compression.m_type == Compression::NONE

  || src_len block_size * 2) {

 *dst_len = src_len;

 return(src);

 }

 /* Must compress to = N-1 FS blocks. */

 ulint out_len = src_len – (FIL_PAGE_DATA + block_size);

 /* This is the original data page size – the page header. */

 ulint content_len = src_len – FIL_PAGE_DATA;

 /* Only compress the data + trailer, leave the header alone */

 switch (compression.m_type) {

 case Compression::NONE:

 ut_error;

 case Compression::ZLIB: {

 uLongf zlen = static_cast uLongf (out_len);

 if (compress2(

 dst + FIL_PAGE_DATA,

  zlen,

 src + FIL_PAGE_DATA,

 static_cast uLong (content_len),

 static_cast int (compression_level)) != Z_OK) {

 *dst_len = src_len;

 return(src);

 }

 len = static_cast ulint (zlen);

 break;

 }

 case Compression::LZ4:

 len = LZ4_compress_default(

 reinterpret_cast char* (src) + FIL_PAGE_DATA,

 reinterpret_cast char* (dst) + FIL_PAGE_DATA,

 static_cast int (content_len),

 static_cast int (out_len));

 if (len == 0 || len = out_len) {

 *dst_len = src_len;

 return(src);

 }

 break;

 default:

 *dst_len = src_len;

 return(src);

 }

 /* Copy the header as is. */

 memmove(dst, src, FIL_PAGE_DATA);

 /* Add compression control information. Required for decompressing. */

 mach_write_to_2(dst + FIL_PAGE_TYPE, FIL_PAGE_COMPRESSED);

 mach_write_to_1(dst + FIL_PAGE_VERSION, 1);

 mach_write_to_1(dst + FIL_PAGE_ALGORITHM_V1, compression.m_type);

 mach_write_to_2(dst + FIL_PAGE_ORIGINAL_TYPE_V1, page_type);

 mach_write_to_2(dst + FIL_PAGE_ORIGINAL_SIZE_V1, content_len);

 mach_write_to_2(dst + FIL_PAGE_COMPRESS_SIZE_V1, len);

 /* Round to the next full block size */

 len += FIL_PAGE_DATA;

 *dst_len = ut_calc_align(len, block_size);

 /* Clear out the unused portion of the page. */

 if (len % block_size) {

 memset(dst + len, 0x0, block_size – (len % block_size));

 }

 return(dst);

}

到此,相信大家對“MySQL5.7 中有哪些新特性”有了更深的了解,不妨來實際操作一番吧!這里是丸趣 TV 網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!

正文完
 
丸趣
版權聲明:本站原創文章,由 丸趣 2023-07-20發表,共計2940字。
轉載說明:除特殊說明外本站除技術相關以外文章皆由網絡搜集發布,轉載請注明出處。
評論(沒有評論)
主站蜘蛛池模板: 莆田市| 丘北县| 隆子县| 甘洛县| 伊春市| 陆河县| 胶州市| 霞浦县| 海淀区| 香格里拉县| 大冶市| 襄垣县| 惠州市| 鸡东县| 昭苏县| 绍兴县| 灌阳县| 和顺县| 无锡市| 大渡口区| 伽师县| 建昌县| 宜城市| 漯河市| 宜良县| 长武县| 康定县| 河池市| 吉安市| 西平县| 崇仁县| 正镶白旗| 沛县| 瓮安县| 莱阳市| 南开区| 麟游县| 赤峰市| 石棉县| 诏安县| 舟曲县|