日本熟妇hd丰满老熟妇,中文字幕一区二区三区在线不卡 ,亚洲成片在线观看,免费女同在线一区二区

冷數(shù)據(jù)DDL

本文介紹了對(duì)冷數(shù)據(jù)進(jìn)行DDL的操作方法以及優(yōu)化方法。

前提條件

DDL執(zhí)行算法

PolarDB MySQL版冷數(shù)據(jù)支持以下2種DDL執(zhí)行算法:

  • INSTANT算法: 使用INSTANT算法執(zhí)行DDL操作時(shí),只需要修改數(shù)據(jù)字典中的元數(shù)據(jù),不需要修改或復(fù)制存量數(shù)據(jù),也不需要重建表。因此其不受表的大小影響,整個(gè)DDL過(guò)程可以秒級(jí)完成。

  • COPY算法:當(dāng)使用COPY算法執(zhí)行DDL操作時(shí),需要將表中所有的數(shù)據(jù)復(fù)制到新表中。在數(shù)據(jù)復(fù)制期間,會(huì)持有原表的SNW(SHARED_NO_WRITE)鎖。因此,在執(zhí)行DDL操作期間僅支持讀操作,不允許執(zhí)行并發(fā)寫入操作,對(duì)業(yè)務(wù)影響較大。

為了使用指定算法執(zhí)行DDL語(yǔ)句,您可以指定ALGORITHM字段,可選的值有DEFAULT、INSTANT和COPY。當(dāng)DDL操作不支持該算法時(shí),會(huì)立即返回報(bào)錯(cuò)。

說(shuō)明

通常來(lái)說(shuō),INSTANT算法比COPY算法代價(jià)更低,執(zhí)行影響更小。當(dāng)用戶不通過(guò)ALGORITHM手動(dòng)指定DDL使用的算法時(shí),PolarDB MySQL版會(huì)自動(dòng)優(yōu)先選擇INSTANT算法,其次才考慮使用COPY算法。因此,本文詳細(xì)介紹INSTANT算法。

INSTANT算法使用說(shuō)明

8.0.2.2.23版本支持了OSS冷數(shù)據(jù)表的元數(shù)據(jù)(OSS META)能力。只有當(dāng)表開(kāi)啟OSS META時(shí),才可以支持INSTANT DDL,否則只能支持COPY DDL。 使用方法如下:

  1. 查看當(dāng)前表是否開(kāi)啟OSS META。

    通過(guò)show create table命令,可以查看當(dāng)前表是否開(kāi)啟了OSS META。如果返回結(jié)果中有OSS META=1 ,則說(shuō)明當(dāng)前表開(kāi)啟了OSS META。

    show create table t \G
    *************************** 1. row ***************************
           Table: t
    Create Table: CREATE TABLE `t` (
      `id` varchar(1000) DEFAULT NULL
    ) /*!99990 800020213 STORAGE OSS */ ENGINE=CSV DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci /*!99990 800020204 NULL_MARKER='NULL' */ /*!99990 800020223 OSS META=1 */
    1 row in set (0.00 sec)
  2. 老化場(chǎng)景下增加OSS META。

    無(wú)論是InnoDB單表老化為OSS外表,還是InnoDB分區(qū)表歸檔至OSS外表,或是InnoDB表歸檔至OSS分區(qū),在創(chuàng)建新的OSS外表時(shí),都是通過(guò)系統(tǒng)變量 use_oss_meta來(lái)控制當(dāng)前創(chuàng)建的OSS外表(分區(qū))是否使用OSS META管理元數(shù)據(jù)。

    當(dāng)系統(tǒng)變量use_oss_meta為ON時(shí),例如:

    show variables like "use_oss_meta";
    +---------------+-------+
    | Variable_name | Value |
    +---------------+-------+
    | use_oss_meta  | ON    |
    +---------------+-------+
    1 row in set (0.03 sec)
    

    此時(shí),歸檔至OSS外表會(huì)帶有OSS META標(biāo)記:

    alter table t engine = csv storage oss;
    Query OK, 3 rows affected (2.13 sec)
    Records: 3  Duplicates: 0  Warnings: 0
    
      
    show create table t \G
    *************************** 1. row ***************************
           Table: t
    Create Table: CREATE TABLE `t` (
      `id` varchar(1000) DEFAULT NULL
    ) /*!50100 */ /*!99990 800020213 STORAGE OSS */ ENGINE=CSV DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci /*!99990 800020204 NULL_MARKER='NULL' */ /*!99990 800020223 OSS META=1 */
    1 row in set (0.00 sec)
    
    alter table t1 change partition p0 engine = orc;
    Query OK, 0 rows affected (1.95 sec)
    Records: 0  Duplicates: 0  Warnings: 0
    
    
    show create table t1 \G
    *************************** 1. row ***************************
           Table: t1
    Create Table: CREATE TABLE `t1` (
      `id` int(11) DEFAULT NULL,
      `name` varchar(20) DEFAULT NULL,
      `order_time` datetime DEFAULT NULL
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci /*!99990 800020223 OSS META=1 */ CONNECTION='default_oss_server'
    /*!99990 800020205 PARTITION BY RANGE  COLUMNS(id)
    (PARTITION p0 VALUES LESS THAN (10) ENGINE = ORC,
     PARTITION p1 VALUES LESS THAN (20) ENGINE = InnoDB,
     PARTITION p2 VALUES LESS THAN (30) ENGINE = InnoDB,
     PARTITION p3 VALUES LESS THAN (40) ENGINE = InnoDB,
     PARTITION p4 VALUES LESS THAN (50) ENGINE = InnoDB,
     PARTITION p5 VALUES LESS THAN (60) ENGINE = InnoDB,
     PARTITION p6 VALUES LESS THAN (70) ENGINE = InnoDB,
     PARTITION p7 VALUES LESS THAN (80) ENGINE = InnoDB,
     PARTITION p8 VALUES LESS THAN (90) ENGINE = InnoDB,
     PARTITION p9 VALUES LESS THAN (100) ENGINE = InnoDB,
     PARTITION p10 VALUES LESS THAN (110) ENGINE = InnoDB) */
    1 row in set (0.00 sec)
    
  3. 對(duì)沒(méi)有OSS META的表添加META。

    可以通過(guò)repair命令對(duì)沒(méi)有META的表額外增加OSS META。

    repair table t;
    +--------+--------+----------+----------+
    | Table  | Op     | Msg_type | Msg_text |
    +--------+--------+----------+----------+
    | test.t | repair | status   | OK       |
    +--------+--------+----------+----------+
    1 row in set (0.84 sec)
    
    show create table t \G
    *************************** 1. row ***************************
           Table: t
    Create Table: CREATE TABLE `t` (
      `id` varchar(1000) DEFAULT NULL
    ) /*!50100 */ /*!99990 800020213 STORAGE OSS */ ENGINE=CSV DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci /*!99990 800020204 NULL_MARKER='NULL' */ /*!99990 800020223 OSS META=1 */
    1 row in set (0.00 sec)
    說(shuō)明

    在repair期間會(huì)持有表的X鎖,當(dāng)前表無(wú)法查詢和修改。repair實(shí)際時(shí)間與表的大小有關(guān)。

  4. 關(guān)閉當(dāng)前表的OSS META功能。

    可以通過(guò)disable命令關(guān)閉當(dāng)前表的META。

    alter table t disable oss meta;
    Query OK, 0 rows affected (0.04 sec)
    Records: 0  Duplicates: 0  Warnings: 0
    
    show create table t \G
    *************************** 1. row ***************************
           Table: t
    Create Table: CREATE TABLE `t` (
      `id` varchar(1000) DEFAULT NULL
    ) /*!50100 */ /*!99990 800020213 STORAGE OSS */ ENGINE=CSV DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci /*!99990 800020204 NULL_MARKER='NULL' */
    1 row in set (0.00 sec)
    

    關(guān)閉后,表上不會(huì)顯示OSS META標(biāo)記。

    說(shuō)明

    執(zhí)行disable命令關(guān)閉META后,無(wú)需重啟,即可生效。

DDL行為特征

COLUMN操作

操作

重建表

僅修改元數(shù)據(jù)

增加列

1

1

刪除列

重命名列

重排序列

設(shè)置列的默認(rèn)值

修改列注釋

修改列類型

擴(kuò)展VARCHAR長(zhǎng)度

將UTF8mb3字符集修改為UTF8mb4字符集

2

2

刪除列默認(rèn)值

修改auto-increment值

變更某列為NULL

變更某列為非NULL

修改ENUM/SET列的定義

3

  1. 秒級(jí)加字段功能僅支持將列添加至表的末尾。同時(shí),需要當(dāng)前表開(kāi)啟OSS META 。當(dāng)表未指定主鍵時(shí),需要將參數(shù)implicit_primary_key的值設(shè)置為OFF,以避免在執(zhí)行秒級(jí)加字段操作時(shí)因表的最末尾的隱式主鍵列導(dǎo)致加列操作失敗。如果集群不支持使用秒級(jí)加字段功能,增加字段將使用COPY方式執(zhí)行DDL。此時(shí)需要進(jìn)行全表重建,重建期間允許并發(fā)讀操作。

  2. 當(dāng)滿足以下條件時(shí),將列的字符集從UTF8mb3修改至UTF8mb4僅修改元數(shù)據(jù),無(wú)需修改數(shù)據(jù)。否則,需要使用COPY算法進(jìn)行表重建,且重建期間全程鎖表,目標(biāo)表只能讀,不能執(zhí)行寫入操作。

    • 列類型為CHAR、VARCHAR、ENUM以及TEXT類型。

    • 修改的列上不存在任何索引。

    • 字符集轉(zhuǎn)換前后,列的最大存儲(chǔ)長(zhǎng)度均小于256或均大于255。

    您可以通過(guò)指定ALGORITHM=INSTANT 來(lái)強(qiáng)制使用非重建表的方式執(zhí)行DDL,如果需要使用COPY算法才能執(zhí)行時(shí),會(huì)立刻返回報(bào)錯(cuò)。示例如下:

    ALTER TABLE test modify column b char(1) CHARACTER SET utf8mb4 default null,algorithm = INSTANT;
    ERROR 1845 (0A000): ALGORITHM=INSTANT is not supported for this operation. Try ALGORITHM=COPY/INPLACE.
  3. 僅當(dāng)數(shù)據(jù)類型的存儲(chǔ)大小不發(fā)生改變,且向ENUM或SET的末尾追加元素時(shí),才可以僅修改元數(shù)據(jù),不重建整張表。否則需要使用COPY算法進(jìn)行表重建。

Table操作

操作

重建表

僅修改元數(shù)據(jù)

開(kāi)啟META

關(guān)閉META

聲明Character Set

轉(zhuǎn)換Character Set

重命名表

1

修改表注釋

  1. 重命名表不會(huì)全部重寫表的數(shù)據(jù),但是會(huì)對(duì)該表對(duì)應(yīng)的OSS數(shù)據(jù)文件做RENAME操作,因此rename速度和表大小呈正相關(guān),略慢于其他的INSTANT操作。