テーブルのフラグメンテーションをチェックする
| 日付 | 2015/03/27 |
|---|---|
| ID | 76864 (英語原文参照) |
| バージョン | v12以降 |
| プラットフォーム | Windows, Mac |
4Dのデータファイルにフラグメンテーションが発生すると、インデックスの無いフィールドの検索や、レコードのアクセスに無駄な時間が費やされるようになります。このフラグメンテーションは、現行のMSCでは表示されませんが、4D v12より追加されたGet table fragmentationコマンドを利用して調べることができます。
次のメソッドは、データベース内の全てのテーブルについてフラグメンテーションを調べます。
C_LONGINT($tables_l;$i;$a)
C_TIME($fileRef)
C_TEXT($crlf)
C_LONGINT($frag_l)
$tables_l:=Get last table number
ARRAY TEXT($tablesNames_at;$tables_l)
ARRAY LONGINT($tableRecs_al;$tables_l)
ARRAY LONGINT($tableFrag_al;$tables_l)
For ($i;1;$tables_l)
If (Is table number valid($i))
$frag_l:=Get table fragmentation(Table($i)->)
$tablesNames_at{$i}:=Table name($i)
$tableRecs_al{$i}:=Records in table(Table($i)->)
$tableFrag_al{$i}:=$frag_l
Else
$tablesNames_at{$i}:="N/A"
$tableFrag_al{$i}:=0
$tableRecs_al{$i}:=0
End if
End for
// export to file
$fileRef:=Create document(Get 4D folder(Database Folder)+"fragmentation.csv")
$crlf:=Char(Carriage return)+Char(Line feed)
SEND PACKET($fileRef;"Table #"+Char(Tab)+"Table Name"+Char(Tab)+"Fragmentation"+Char(Tab)+"Records Found"+$crlf)
For ($a;1;$tables_l)
SEND PACKET($fileRef;String($a)+Char(Tab)+$tablesNames_at{$a}+Char(Tab)+\
String($tableFrag_al{$a})+Char(Tab)+String($tableRecs_al{$a})+$crlf)
End for
CLOSE DOCUMENT($fileRef)
SHOW ON DISK(Get 4D folder(Database Folder)+"fragmentation.csv")
このコードは、タブ区切りのドキュメントをストラクチャファイルと同じフォルダに生成します。タブ区切りの情報は、次の並びになります。
Table # Table Name Fragmentation Records Found