3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Swingbench でワークロードを実行しながら DBMS_REDEFINITION でテーブルレイアウト変更

3
Last updated at Posted at 2026-08-31

はじめに

前回、DBMS_REDEFINITION を使用して DML を止めずにテーブルレイアウトを変更する方法をご紹介しましたが、今回はベンチマークツールの Swingbench を使ってよりリアルな状況でテーブルレイアウトを変更してみます。

Swingbench の設定

下記の要領でベンチマーク用データを作成しました。

[opc@gp labs]$ cat 1install.sh
#!/bin/sh
   ./swingbench/bin/oewizard \
      -cf xx.zip \
      -cs xx \
      -ts DATA \
      -dbap xx \
      -dba xx \
      -u soe \
      -p xx \
      -async_off \
      -scale 1 \
      -hashpart \
      -create \
      -cl \
      -v
[opc@gp labs]$ ./1install.sh
SwingBench Wizard
Author  :       Dominic Giles
Version :       2.7.0.1561

Running in Lights Out Mode using config file : ../wizardconfigs/oewizard.xml
Running script ../sql/orderentry/soedgcreateuser.sql
(snip)

Data Generation Runtime Metrics
+-------------------------+-------------+
| Description             | Value       |
+-------------------------+-------------+
| Connection Time         | 0:00:00.001 |
| Data Generation Time    | 0:09:52.254 |
| DDL Creation Time       | 0:03:07.593 |
| Total Run Time          | 0:12:59.853 |
| Rows Inserted per sec   | 26,787      |
| Actual Rows Generated   | 15,878,121  |
| Commits Completed       | 810         |
| Batch Updates Completed | 79,405      |
+-------------------------+-------------+

Validation Report
The schema appears to have been created successfully.

Valid Objects
Valid Tables : 'ORDERS','ORDER_ITEMS','CUSTOMERS','WAREHOUSES','ORDERENTRY_METADN','PRODUCT_DESCRIPTIONS','ADDRESSES','CARD_DETAILS'
Valid Indexes : 'PRD_DESC_PK','PROD_NAME_IX','PRODUCT_INFORMATION_PK','PROD_SUPP_PK','INV_PRODUCT_IX','INV_WAREHOUSE_IX','ORDER_PK','ORD_SALES_REP_IX','ORD_CUSTHOUSE_IX','ORDER_ITEMS_PK','ITEM_ORDER_IX','ITEM_PRODUCT_IX','WAREHOUSES_PK','WHAIL_IX','CUST_ACCOUNT_MANAGER_IX','CUST_FUNC_LOWER_NAME_IX','ADDRESS_PK','ADDRESILS_CUST_IX'
Valid Views : 'PRODUCTS','PRODUCT_PRICES'
Valid Sequences : 'CUSTOMER_SEQ','ORDERS_SEQ','ADDRESS_SEQ','LOGON_SEQ','CARD_DE
Valid Code : 'ORDERENTRY'
Schema Created
[opc@gp labs]$
[opc@gp labs]$ ./2-1check.sh
The Order Entry Schema appears to be valid.
--------------------------------------------------
|Object Type    |     Valid|   Invalid|   Missing|
--------------------------------------------------
|Table          |        10|         0|         0|
|Index          |        26|         0|         0|
|Sequence       |         5|         0|         0|
|View           |         2|         0|         0|
|Code           |         1|         0|         0|
--------------------------------------------------

Collecting statistics for the schema
Collected statistics in : 0:00:16.142
Order Entry Schemas Tables
+----------------------+-----------+--------+---------+-------------+--------------+
| Table Name           | Rows      | Blocks | Size    | Compressed? | Partitioned? |
+----------------------+-----------+--------+---------+-------------+--------------+
| ORDER_ITEMS          | 7,158,785 | 96,704 | 768.0MB |             | Yes          |
| CARD_DETAILS         | 1,500,000 | 32,192 | 256.0MB |             | Yes          |
| LOGON                | 2,382,984 | 32,192 | 256.0MB |             | Yes          |
| ADDRESSES            | 1,500,000 | 32,192 | 256.0MB |             | Yes          |
| ORDERS               | 1,429,790 | 32,192 | 256.0MB |             | Yes          |
| CUSTOMERS            | 1,000,000 | 32,192 | 256.0MB |             | Yes          |
| INVENTORIES          | 903,562   | 2,512  | 20.0MB  | Disabled    | No           |
| PRODUCT_DESCRIPTIONS | 1,000     | 35     | 320KB   | Disabled    | No           |
| PRODUCT_INFORMATION  | 1,000     | 28     | 256KB   | Disabled    | No           |
| ORDERENTRY_METADATA  | 4         | 5      | 64KB    | Disabled    | No           |
| WAREHOUSES           | 1,000     | 5      | 64KB    | Disabled    | No           |
+----------------------+-----------+--------+---------+-------------+--------------+
                                Total Space     2.0GB
[opc@gp labs]$

ワークロードは下記の要領で動かします。

[opc@gp labs]$ cat 3execute.sh
#!/bin/sh
./swingbench/bin/charbench -c ~/labs/swingbench/configs/SOE_Server_Side_V2.xml \
         -cf xx.zip \
         -cs xx -u soe -p xx \
         -v users,tpm,tps,vresp \
         -intermin 50 \
         -intermax 200 \
         -min 0 \
         -max 0 \
         -uc 10 \
         -di SQ,WQ,WA
[opc@gp labs]$

仮表の作成

今回、ワークロードを実行しながらレイアウトを変更するのはcustomersです。
(仮表:customers_int)

04:42:15 SQL> info soe.customers
TABLE: CUSTOMERS
         LAST ANALYZED:2026-08-25 04:56:42.0
         ROWS         :1000000
         SAMPLE SIZE  :1000000
         INMEMORY     :
         COMMENTS     :

Columns
NAME                DATA TYPE            NULL  DEFAULT    COMMENTS
*CUSTOMER_ID        NUMBER(12,0)         No
 CUST_FIRST_NAME    VARCHAR2(40 BYTE)    No
 CUST_LAST_NAME     VARCHAR2(40 BYTE)    No
 NLS_LANGUAGE       VARCHAR2(3 BYTE)     Yes
 NLS_TERRITORY      VARCHAR2(90 BYTE)    Yes
 CREDIT_LIMIT       NUMBER(9,2)          Yes
 CUST_EMAIL         VARCHAR2(100 BYTE)   Yes
 ACCOUNT_MGR_ID     NUMBER(12,0)         Yes
 CUSTOMER_SINCE     DATE                 Yes
 CUSTOMER_CLASS     VARCHAR2(40 BYTE)    Yes
 SUGGESTIONS        VARCHAR2(40 BYTE)    Yes
 DOB                DATE                 Yes
 MAILSHOT           VARCHAR2(1 BYTE)     Yes
 PARTNER_MAILSHOT   VARCHAR2(1 BYTE)     Yes
 PREFERRED_ADDRESS  NUMBER(12,0)         Yes
 PREFERRED_CARD     NUMBER(12,0)         Yes

Indexes
INDEX_NAME                     UNIQUENESS    STATUS    FUNCIDX_STATUS    COLUMNS
______________________________ _____________ _________ _________________ _____________________________
SOE.CUST_DOB_IX                NONUNIQUE     VALID                       DOB
SOE.CUSTOMERS_PK               UNIQUE        VALID                       CUSTOMER_ID
SOE.CUST_EMAIL_IX              NONUNIQUE     VALID                       CUST_EMAIL
SOE.CUST_ACCOUNT_MANAGER_IX    NONUNIQUE     VALID                       ACCOUNT_MGR_ID
SOE.CUST_FUNC_LOWER_NAME_IX    NONUNIQUE     VALID     ENABLED           SYS_NC00017$, SYS_NC00018$


References
TABLE_NAME    CONSTRAINT_NAME          DELETE_RULE    STATUS     DEFERRABLE        VALIDATED        GENERATED
_____________ ________________________ ______________ __________ _________________ ________________ ____________
ADDRESSES     ADD_CUST_FK              NO ACTION      ENABLED    DEFERRABLE        NOT VALIDATED    USER NAME
ORDERS        ORDERS_CUSTOMER_ID_FK    SET NULL       ENABLED    NOT DEFERRABLE    NOT VALIDATED    USER NAME

04:57:58 SQL>
04:57:58 SQL>
04:58:12 SQL> info soe.customers_int
TABLE: CUSTOMERS_INT
         LAST ANALYZED:
         ROWS         :
         SAMPLE SIZE  :
         INMEMORY     :DISABLED
         COMMENTS     :

Columns
NAME                DATA TYPE            NULL  DEFAULT    COMMENTS
 CUSTOMER_ID        NUMBER(12,0)         Yes
 CUST_FIRST_NAME    VARCHAR2(40 BYTE)    Yes
 CUST_LAST_NAME     VARCHAR2(40 BYTE)    Yes
 COL_INT            DATE                 Yes                        ★追加カラム
 NLS_LANGUAGE       VARCHAR2(3 BYTE)     Yes
 NLS_TERRITORY      VARCHAR2(90 BYTE)    Yes
 CREDIT_LIMIT       NUMBER(9,2)          Yes
 CUST_EMAIL         VARCHAR2(100 BYTE)   Yes
 ACCOUNT_MGR_ID     NUMBER(12,0)         Yes
 CUSTOMER_SINCE     DATE                 Yes
 CUSTOMER_CLASS     VARCHAR2(40 BYTE)    Yes
 SUGGESTIONS        VARCHAR2(40 BYTE)    Yes
 DOB                DATE                 Yes
 MAILSHOT           VARCHAR2(1 BYTE)     Yes
 PARTNER_MAILSHOT   VARCHAR2(1 BYTE)     Yes
 PREFERRED_ADDRESS  NUMBER(12,0)         Yes
 PREFERRED_CARD     NUMBER(12,0)         Yes


04:58:21 SQL>

ワークロード実行&テーブル再定義開始

ワークロードを実行し、テーブル再定義を開始します。

[opc@gp labs]$
[opc@gp labs]$ ./3execute.sh
Swingbench
Author  :        Dominic Giles
Version :        2.7.0.1561

Results will be written to results.xml
Hit Return to Terminate Run...

Time      Users       TPM      TPS     NCR    UCD    BP     OP     PO     BO     SQ     WQ     WA
04:59:47  [0/10]      0        0       0      0      0      0      0      0      0      0      0
04:59:49  [10/10]     0        0       0      0      0      0      0      0      0      0      0
(snip)
04:58:21 SQL> --テーブル再定義開始
04:58:21 SQL> BEGIN
  2    DBMS_REDEFINITION.START_REDEF_TABLE(
  3      uname      => 'soe',
  4      orig_table => 'customers',
  5      int_table  => 'customers_int');
  6  END;
  7* /

PL/SQL procedure successfully completed.

Elapsed: 00:00:22.661
05:00:39 SQL>
05:00:39 SQL> select count(1) from soe.customers;

   COUNT(1)
___________
    1000607

Elapsed: 00:00:00.039
05:00:51 SQL> select count(1) from soe.customers_int;

   COUNT(1)
___________
    1000273

Elapsed: 00:00:00.530
05:00:55 SQL>
05:00:55 SQL> --依存オブジェクトのクローン
05:00:55 SQL> DECLARE
  2   num_errors PLS_INTEGER;
  3   BEGIN
  4     DBMS_REDEFINITION.COPY_TABLE_DEPENDENTS(
  5       uname         => 'soe',
  6       orig_table    => 'customers',
  7       int_table     => 'customers_int',
  8       num_errors    => num_errors);
  9   END;
 10*  /

PL/SQL procedure successfully completed.

Elapsed: 00:00:20.398
05:01:18 SQL>
05:01:18 SQL>
05:01:18 SQL>
05:01:18 SQL> info soe.customers_int
TABLE: CUSTOMERS_INT
         LAST ANALYZED:2026-08-25 05:00:39.0
         ROWS         :1000273
         SAMPLE SIZE  :1000273
         INMEMORY     :DISABLED
         COMMENTS     :

Columns
NAME                DATA TYPE            NULL  DEFAULT    COMMENTS
*CUSTOMER_ID        NUMBER(12,0)         Yes
 CUST_FIRST_NAME    VARCHAR2(40 BYTE)    Yes
 CUST_LAST_NAME     VARCHAR2(40 BYTE)    Yes
 COL_INT            DATE                 Yes
 NLS_LANGUAGE       VARCHAR2(3 BYTE)     Yes
 NLS_TERRITORY      VARCHAR2(90 BYTE)    Yes
 CREDIT_LIMIT       NUMBER(9,2)          Yes
 CUST_EMAIL         VARCHAR2(100 BYTE)   Yes
 ACCOUNT_MGR_ID     NUMBER(12,0)         Yes
 CUSTOMER_SINCE     DATE                 Yes
 CUSTOMER_CLASS     VARCHAR2(40 BYTE)    Yes
 SUGGESTIONS        VARCHAR2(40 BYTE)    Yes
 DOB                DATE                 Yes
 MAILSHOT           VARCHAR2(1 BYTE)     Yes
 PARTNER_MAILSHOT   VARCHAR2(1 BYTE)     Yes
 PREFERRED_ADDRESS  NUMBER(12,0)         Yes
 PREFERRED_CARD     NUMBER(12,0)         Yes

Indexes
INDEX_NAME                            UNIQUENESS    STATUS    FUNCIDX_STATUS    COLUMNS
_____________________________________ _____________ _________ _________________ _____________________________
SOE.TMP$$_CUST_DOB_IX0                NONUNIQUE     VALID                       DOB
SOE.TMP$$_CUSTOMERS_PK0               UNIQUE        VALID                       CUSTOMER_ID
SOE.TMP$$_CUST_EMAIL_IX0              NONUNIQUE     VALID                       CUST_EMAIL
SOE.TMP$$_CUST_ACCOUNT_MANAGER_IX0    NONUNIQUE     VALID                       ACCOUNT_MGR_ID
SOE.TMP$$_CUST_FUNC_LOWER_NAME_IX0    NONUNIQUE     VALID     ENABLED           SYS_NC00018$, SYS_NC00019$


References
TABLE_NAME    CONSTRAINT_NAME                 DELETE_RULE    STATUS      DEFERRABLE        VALIDATED        GENERATED
_____________ _______________________________ ______________ ___________ _________________ ________________ ____________
ADDRESSES     TMP$$_ADD_CUST_FK0              NO ACTION      DISABLED    DEFERRABLE        NOT VALIDATED    USER NAME
ORDERS        TMP$$_ORDERS_CUSTOMER_ID_FK0    SET NULL       DISABLED    NOT DEFERRABLE    NOT VALIDATED    USER NAME

05:01:27 SQL>
05:01:27 SQL> --テーブル再定義完了
05:01:27 SQL> BEGIN
  2    DBMS_REDEFINITION.FINISH_REDEF_TABLE(
  3      uname      => 'soe',
  4      orig_table => 'customers',
  5      int_table  => 'customers_int');
  6  END;
  7* /

PL/SQL procedure successfully completed.

Elapsed: 00:00:02.255
05:01:35 SQL>
05:01:35 SQL>
05:01:35 SQL> info soe.customers;
TABLE: CUSTOMERS
         LAST ANALYZED:2026-08-25 05:00:39.0
         ROWS         :1000273
         SAMPLE SIZE  :1000273
         INMEMORY     :DISABLED
         COMMENTS     :

Columns
NAME                DATA TYPE            NULL  DEFAULT    COMMENTS
*CUSTOMER_ID        NUMBER(12,0)         Yes
 CUST_FIRST_NAME    VARCHAR2(40 BYTE)    No
 CUST_LAST_NAME     VARCHAR2(40 BYTE)    No
 COL_INT            DATE                 Yes                        ★追加カラム
 NLS_LANGUAGE       VARCHAR2(3 BYTE)     Yes
 NLS_TERRITORY      VARCHAR2(90 BYTE)    Yes
 CREDIT_LIMIT       NUMBER(9,2)          Yes
 CUST_EMAIL         VARCHAR2(100 BYTE)   Yes
 ACCOUNT_MGR_ID     NUMBER(12,0)         Yes
 CUSTOMER_SINCE     DATE                 Yes
 CUSTOMER_CLASS     VARCHAR2(40 BYTE)    Yes
 SUGGESTIONS        VARCHAR2(40 BYTE)    Yes
 DOB                DATE                 Yes
 MAILSHOT           VARCHAR2(1 BYTE)     Yes
 PARTNER_MAILSHOT   VARCHAR2(1 BYTE)     Yes
 PREFERRED_ADDRESS  NUMBER(12,0)         Yes
 PREFERRED_CARD     NUMBER(12,0)         Yes

Indexes
INDEX_NAME                     UNIQUENESS    STATUS    FUNCIDX_STATUS    COLUMNS
______________________________ _____________ _________ _________________ _____________________________
SOE.CUST_DOB_IX                NONUNIQUE     VALID                       DOB
SOE.CUSTOMERS_PK               UNIQUE        VALID                       CUSTOMER_ID
SOE.CUST_EMAIL_IX              NONUNIQUE     VALID                       CUST_EMAIL
SOE.CUST_ACCOUNT_MANAGER_IX    NONUNIQUE     VALID                       ACCOUNT_MGR_ID
SOE.CUST_FUNC_LOWER_NAME_IX    NONUNIQUE     VALID     ENABLED           SYS_NC00018$, SYS_NC00019$


References
TABLE_NAME    CONSTRAINT_NAME          DELETE_RULE    STATUS     DEFERRABLE        VALIDATED    GENERATED
_____________ ________________________ ______________ __________ _________________ ____________ ____________
ADDRESSES     ADD_CUST_FK              NO ACTION      ENABLED    DEFERRABLE        VALIDATED    USER NAME
ORDERS        ORDERS_CUSTOMER_ID_FK    SET NULL       ENABLED    NOT DEFERRABLE    VALIDATED    USER NAME

05:01:47 SQL>
05:01:47 SQL>
05:01:47 SQL>

結果

TPS と DBMS_REDEFINITION の実行期間をグラフにすると下表のようになります。(DeWitt条項があるため、念のため具体的な数値は割愛)
DBMS_REDEFINITION の実行中も TPS は顕著に劣化していないこと、処理を継続できていることがわかります。

image.png

3
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?