初心者のFileMaker pro Q&A (旧掲示板)

みんなに優しく、解りやすくをモットーに開設しています。 以下のルールを守りみんなで助け合いましょう。

1.ファイルメーカーで解らない事があればここで質問して下さい。 何方でも、ご質問・ご回答お願いします。 (優しく回答しましょう)

You are not logged in.

Announcement

新しい掲示板は、こちら:https://fm-aid.com/forum/t/filemaker


#1 2017-10-10 17:11:06

curefunk
Member

ExecuteSQLを使用後、ファイルが肥大化

FileMaker Pro 16 Advanced
Windows7 64bit

ExecuteSQLを用いて検索を実行後、
ファイルを閉じるとfmp12ファイルの容量が数十MB~数百MB単位で肥大化していきます。
当初6GBだったファイルが14GBほどまで肥大してしまいました。

SQLで検索対象にしているテーブルのレコード総数は1万5000件を超えます。
JOINしているテーブルも9000件を超えます。

ウインドウを閉じる際に肥大していますが、ウインドウを閉じる際のスクリプトトリガは走らせておりません。
SQLの返り値がClose時に保存されているのかとおもい、SQLの返り値を入れているテーブルを空白化するスクリプトをClose時のトリガに入れてみましたが、
変わらず肥え続けています。
コピーファイルを作って全テーブル、全レイアウトを削除しましたが14GBから6GBも残ってしまいました。

・肥大化を防ぐ方法
・膨れ上がった容量を削る方法
・膨れ上がる原因

以上3点、指南いただけますでしょうか。

Last edited by curefunk (2017-10-11 13:41:20)

Offline

#2 2017-10-10 20:36:59

wader
Member

Re: ExecuteSQLを使用後、ファイルが肥大化

SQLの返り値を入れているテーブルを空白化

Truncateした上で、最適化保存しないともとのファイルサイズにはならないでしょう。
レコードとしてテーブルに保存した時点でその分の領域は増えていきますから、ExecuteSQL()自体とは特に関係なさそうな現象です。

Offline

#3 2017-10-10 22:39:16

qb_dp
Member

Re: ExecuteSQLを使用後、ファイルが肥大化

おそらく「索引データ」が増えているのでしょう。
ExecuteSQLで検索した場合でも「索引」が作成されます。「索引」を削除すれば、容量は少なくなります。
但し、索引がない場合、検索やソートに時間がかかります。
フィールドごとに索引作成の設定ができるので、検索・ソート頻度の少ないフィールドは、索引なしにするなどして、
検索やソート速度と容量のバランスを見ながら設定を変更するのが良いと思います。

Offline

#4 2017-10-11 17:05:29

curefunk
Member

Re: ExecuteSQLを使用後、ファイルが肥大化

追記です
https://fm-aid.com/bbs2/viewtopic.php?id=776の#18、
https://qiita.com/hajisan/items/141fddacb1c360b42090
以上2つのサンプルを組合わせて、縦3*横4の検索結果一覧画面を作っています。
ExecuteSQLで検索したデータを、レイアウトのベースとして使っている検索用テーブルの各フィールドに割りあてて表示しています。
検索用テーブルは表示項目のGetValue計算フィールドとページ番号など一覧表示用のフィールドのみが入っている、起動時は空白データの入った12レコードのテーブルです。
SQLの戻り値は検索用テーブルのグローバル格納フィールドにフィールド設定しています。

>waderさん

Truncateした上で、最適化保存しないと

というのは、例えばcloseの際に「テーブルデータを削除」+最適化保存をするということでしょうか
起動時に新規レコード作成スクリプトでレコードを復活させて運用する形でしょうか?


>qb_dpさん

おそらく「索引データ」が増えているのでしょう。

ユニーク指定の項目以外の索引を「なし」にしてみましたが効果ありませんでした。。

Offline

#5 2017-10-11 17:30:37

Shin
Member

Re: ExecuteSQLを使用後、ファイルが肥大化

フラグメントしたゴミが残って行っているのでしょうね。ある程度まで大きくなると、少しましになりますよ。
完全に解消するには、最適化保存しかないです。

Offline

#6 2017-10-11 19:48:41

qb_dp
Member

Re: ExecuteSQLを使用後、ファイルが肥大化

ユニーク指定の項目以外の索引を「なし」にしてみましたが効果ありませんでした。。

検索に絡んでいるフィールドが多いんですかねぇ~...。索引のデータ量って結構大きいんですが。
テストで一度、全て 索引:なし|必要時に索引を自動設定:しない にしてみるとかなり容量は、減るはずです。

Offline

#7 2017-10-11 22:52:20

qb_dp
Member

Re: ExecuteSQLを使用後、ファイルが肥大化

コピーファイルを作って全テーブル、全レイアウトを削除しましたが14GBから6GBも残ってしまいました。

このあたりを読み飛ばしていました。データ無しで良い場合は、「名前をつけて保存->データなしのコピー」ではどうでしょう。

Offline

#8 2017-10-12 16:08:31

curefunk
Member

Re: ExecuteSQLを使用後、ファイルが肥大化

追記です
https://www.soliantconsulting.com/blog/ … ry-builder
こちらのfmp12ファイルに使うテーブル、レコードをインポート(外部参照でなく)して使用するSQLの実行テストをしていたのですが
こちらもテストをしてるうちに現在7GBぐらいに膨らんでいます(必要テーブルとデータ入れた当初は1GBちょい)
検索結果表示用のテーブルやレイアウトに因るものではなく
索引の貼ってあるフィールドをSQLで大量に取得(想定している条件での最大取得件数は1500件弱*6フィールド)すると起きる現象だといい切れそうです。
原因は「膨大な索引を保存してしまっているから」といった感じでしょうか
現在ExecuteSQL関数を使わずに通常の検索実行から一覧を取得する方法に切り替えています。

「名前をつけて保存->データなしのコピー」ではどうでしょう。

手動のテーブル削除ではGB単位で残りましたが、こちらを試してみたらおよそ4MBまで減りました。
「膨れ上がった容量を削る方法」は「データなしのコピー」でなんとかなりそうです。

手動のテーブル削除+最適化保存をしても数GB残るのですが
データ無しのコピーとどのように違うのでしょう?

Offline

Registered users online in this topic: 0, guests: 1
[Bot] ClaudeBot

Board footer

Powered by FluxBB
Modified by Visman

[ Generated in 0.005 seconds, 9 queries executed - Memory usage: 522.63 KiB (Peak: 527.53 KiB) ]