[an error occurred while processing this directive] [an error occurred while processing this directive]


プログラミング
逆引き
クライアントとの通信
VisMでの通信
Factoryでの通信
WebServiceでの通信
CSP (Cache' Server Pages)
Cache'SQL
設定・性能


【広告】









データベースのクリーンアップ その2

Global Compress.



前回、Cache' 2009.1の新機能のデータベースクリーンアップ機能を試してみました。1GBまで肥大化したCache.Datを1MBまで縮小できることを確認しましたが、実は前回はクリーンアップとしては理想的なパターンだったので、今回は少し実際に近いパターンで確認してみます。

大量にデータを登録するプログラムを以下のように用意します。
FULL
  for i=1:1 { //第一階層
    for j=1:1:100 { //第二階層
      Set ^TEST(i,j)="むかしむかし、あるところにお爺さんとお婆さんがおりました。お爺さんは山へ芝刈りに、お婆さんは川に洗濯に行きました。お婆さんが川で洗濯していると、大きな桃がドンブラコ、ドンブラコと、流れてきます"
    }
  }
  Quit
このプログラムを実行し、前回と同様に 目視で1GBを超えたところで実行を停止しました。Cache.Datファイルは1045MBまで大きくなりました。

このとき、^TESTは以下のようになっています。
^TEST(1,1)="むかしむかし、あるところに…"
^TEST(1,2)="むかしむかし、あるところに…"
^TEST(1,3)="むかしむかし、あるところに…"
  :
^TEST(1,99)="むかしむかし、あるところに…"
^TEST(1,100)="むかしむかし、あるところに…"
^TEST(2,1)="むかしむかし、あるところに…"
^TEST(2,2)="むかしむかし、あるところに…"
  :
^TEST(2,100)="むかしむかし、あるところに…"
^TEST(3,1)="むかしむかし、あるところに…"
  :
^TEST(3,100)="むかしむかし、あるところに…"
^TEST(4,1)="むかしむかし、あるところに…"
前回は第一階層のキーのみ使用しましたが、今回は第二階層まで(配列でいうと2次元配列)使用しています。第二階層は1から100までの値が存在します。

この状態で、第二階層のキーが1の物を残して削除します。
KILL
  for i=1:1 {
       
if '$D(^TEST(i)) Quit

    for j=2:1:100 { //第二階層のキーが2から100までを削除
      Kill ^TEST(i,j)
    }

  }
  Quit


ではデータベースクリーンアップを試してみましょう。
システム管理ポータル → データベース → 空き容量 → (対象データベース行の)クリーンアップ を選択します。

ターゲットサイズは0のまま、OKを押すとバックグラウンドで処理が開始されます。

処理が完了すると、データーベースは941MBまでしか縮小されません。

前回は1MBまで小さくなりましたが、今回はデータベースがほとんど小さくなっていません。なぜでしょうか。

ここまでの流れを簡単に図にしてみました

データベースクリーンアップでは末尾の空き領域分だけデータベースを縮小するだけですので、途中の空き領域はそのままとなっています。




実データ領域前方に集中させ、空き領域を空き領域を後方に持ってくることで、クリーンアップを効率的に実行することが出来そうですが、現時点ではその機能は提供されておらず、バックアップ・データベースクリア・リストアといった手順を踏むことでしか実現できません。

機能としては「空き容量」画面の、圧縮リンクから


OK押して圧縮を行うのだと思うのですが、


version2013.1では「サポートされていません」エラーが発生します。
エラー発生

将来のバージョンアップに期待したいと思います。



[an error occurred while processing this directive] [an error occurred while processing this directive]
2014/02/04Update