UJP - 技術情報

Life is fun and easy!

不正IP報告数

Okan Sensor
 
メイン
ログイン
ブログ カテゴリ一覧

     

Sybaseでテーブル分割とその検証 〜その3 デバイスをさらに増やしてみる〜

Sybaseでテーブル分割とその検証

〜その3 デバイスをさらに増やしてみる〜


0.更新履歴

  • 2002.04.24 新規作成

1.はじめに

 このドキュメントでは,ASE11.0.3.3#ESD6にて,テーブル分割を行う手順と,そのパフォーマンスについて検証した結果について説明する.

 なお,「テーブル分割」とは,Oracleでいうパーティションテーブルのことで,概略はドキュメント「テーブルのパーティション分割」を参照のこと.

2.前回のおさらいと今回のテストの説明

  • 前回のテストでは,物理的に3つのデータベースファイル(デバイスファイル)を作成して,パーティションを3つに分け検証した.

デバイス名 サイズ
PTest1_dat01

5MB
PTest1_dat02

5MB
PTest1_dat03

5MB

  • 今回は,前回の倍の6つのデバイスファイルで構成される,同じ容量で構成したセグメントにテーブルを作成して,同様のテストを尾行ってみる.

デバイス名 サイズ
PTest1_dat11

2.5MB
PTest1_dat12

2.5MB
PTest1_dat13

2.5MB
PTest1_dat14

2.5MB
PTest1_dat15

2.5MB
PTest1_dat16

2.5MB

  • デバイスが,物理的に分かれていないが,テーブル分割する事によって効果があるのかを検証する.

3.準備

  • 次のようなデバイスとセグメントを追加する.

1> sp_helpsegment
2> go
 segment name                           status 
 ------- ------------------------------ ------ 
       0 system                              0 
       1 default                             1 
       2 logsegment                          0 
       3 dat_seg                             0 
       4 idx_seg                             0 
       5 PTest_seg                           0 
       6 NTest_seg                           0 
       7 PTest15M_seg                        0 
       8 PTest6_seg                          0 

(return status = 0)
1> sp_helpsegment PTest6_seg
2> go
 segment name                           status 
 ------- ------------------------------ ------ 
       8 PTest6_seg                          0 
 device                         size                   free_pages  
 ------------------------------ ---------------------- ----------- 
 PTest_dat11                    2.0MB                         1024 
 PTest_dat12                    2.0MB                         1024 
 PTest_dat13                    2.0MB                         1024 
 PTest_dat14                    2.0MB                         1024 
 PTest_dat15                    2.0MB                         1024 
 PTest_dat16                    2.0MB                         1024 

(return status = 0)
1>

  • パーティションテーブルを作成する.

1> create table TestTable6   
2> (
3> fieldA numeric(10,0) identity,
4> fieldB char(10)
5> ) on PTest6_seg
6> go
1>

  • alter table文で,作成したテーブル分割を行う.

1> alter table TestTable6 partition 3
2> go
1>

  • 作成したテーブルを確認してみる.

1> sp_help TestTable6
2> go
 Name                           Owner                         
         Type                   
 ------------------------------ ------------------------------ 
        ---------------------- 
 TestTable6                     dbo                           
         user table             

 Data_located_on_segment        When_created               
 ------------------------------ -------------------------- 
 PTest6_seg                            Apr 24 2002  6:09PM 

 Column_name     Type            Length Prec Scale Nulls Default_name   
         Rule_name       Identity 
 --------------- --------------- ------ ---- ----- ----- --------------- 
        --------------- -------- 
 fieldA          numeric              6   10     0     0 NULL           
         NULL                   1 
 fieldB          char                10 NULL  NULL     0 NULL           
         NULL                   0 
Object does not have any indexes.
No defined keys for this object.

 partitionid firstpage   controlpage 
 ----------- ----------- ----------- 
           1       33282       33283 
           2       34305       34306 
           3       35329       35330 
           4       36353       36354 
           5       37377       37378 
           6       38401       38402 
(return status = 0)
1>

  • テーブルが,6つに分割されている事がわかる.

4.直列時の計測テスト

 この章での計測方法は,1プロセスだけでデータベースにI/O負荷をかけ,未分割のテーブルと分割テーブルの性能差について検証する.

4.1.直列でinsert文でデータ投入してみる

  • テーブル分割したテーブルにデータを追加する.

1> set nocount on 
2> go
1> declare @c1 int
2> select @c1 = 1
3> print "Start"
4> select convert(char(12),getdate(),108)
5> while @c1 < 5000
6> begin
7>         insert into TestTable6 values("aaa")
8>         select @c1 = @c1 + 1
9> end
10> print "End"
11> select convert(char(12),getdate(),108)
12> go
Start

 ------------ 
 18:13:20     
End

 ------------ 
 18:14:07     
1>

  • 46秒.
  • ファイルが分かれていて,テーブル分割した第1回目のテストでは,同じテストで47秒だった.
  • なんどかテストしていると,ほぼ47秒に近い46秒のようである.

4.2.直列でデータを削除してみる

  • テーブル分割を行っているテーブルのデータを削除する.

1> select convert(char(12),getdate(),108)
2> delete TestTable6
3> select convert(char(12),getdate(),108)
4> go
              
 ------------ 
 18:23:32   
              
 ------------ 
 18:23:34    
1>

  • 2秒.
  • 前回のテストでは,2秒だったため,あまり変わりは無い.
  • というか,ここまでくるとハードウェアのI/O待ちが原因ともおもわれる.

5.並列テスト用のプログラムを準備する

  • 前回のテストで作成したinsertTable.sqlファイルのテーブル名を修正する.

insertTable.sql
bash$ cat insertTable.sql
declare @c1 int
select @c1 = 1
print "Start"
while @c1 < 5000
begin
        insert into TestTable6 values("aaa")
        select @c1 = @c1 + 1
end
print "End"
go
bash$

  • その他のシェル等は,前回のテストので利用したものが再利用できる.

5.1.シェルを実行してみる

  • 作成したシェルを実行して,計測を行う.

[sybase@poweredge sybase]$ insertTable.Multi.sh
Wed Apr 24 18:25:26 JST 2002
Wed Apr 24 18:25:26 JST 2002
Wed Apr 24 18:25:26 JST 2002
Wed Apr 24 18:25:26 JST 2002
Wed Apr 24 18:25:26 JST 2002
Wed Apr 24 18:26:27 JST 2002
Wed Apr 24 18:26:28 JST 2002
Wed Apr 24 18:26:28 JST 2002
Wed Apr 24 18:26:28 JST 2002
Wed Apr 24 18:26:28 JST 2002

[sybase@poweredge sybase]$

  • 62秒
  • そんな感じで計測する

6.まとめ

  • 計測の結果は,次の表のようになった.

6ファイルでテーブル分割した場合
開始時間 終了時間 実行時間 実行時間(秒)
5個1回目 18:25:26 18:26:28 00:01:02 62
5個2回目 18:27:03 18:28:06 00:01:03 63
5個3回目 18:33:48 18:34:51 00:01:03 63
平均 63

  • 他のデータと見比べてみる.
  • 前回検証した,3つのデバイスファイルを使って,パーティションを3つとした場合の検証データと見比べてみる.

前回検証した,3ファイルでテーブル分割したテーブル
開始時間 終了時間 実行時間 実行時間(秒)
分割1回目 18:41:00 18:42:29 00:01:29 89
分割2回目 18:45:31 18:46:59 00:01:28 88
分割3回目 18:51:33 18:53:02 00:01:29 89
平均 89

  • やっぱり速くなっている.
  • 1つのデバイスで,パーティションを3つとした場合の検証結果

1ファイルでテーブル分割したテーブル
開始時間 終了時間 実行時間 実行時間(秒)
5個1回目 17:00:17 17:01:47 00:01:30 90
5個2回目 17:28:37 17:30:07 00:01:30 90
5個3回目 17:31:53 17:33:24 00:01:31 91
平均 90

  • 分割しなかったときのサンプル.

3ファイルで,テーブル分割してない
開始時間 終了時間 実行時間 実行時間(秒)
なし1回目 18:33:09 18:37:03 00:03:54 234
なし2回目 18:57:06 19:01:01 00:03:55 235
なし3回目 19:04:37 19:08:31 00:03:54 234
平均 234

  • よって,テーブル分割する場合は,数多くデバイスファイルを分ける事をお勧めする.



広告スペース
Google