0

私は多くのSQLITE3データベースを作成するサービスを実行し、後でそれらを再び削除します。それらはおそらく約1日存続します。それらはすべて同じスキーマを持ち、空で始まります。

これを使用して、新しい空のSQLITE3データベースを作成します。

sqlite3 newDatabase.db < myschema.sql

myschema.sqlファイルには、3つのテーブルスキーマなどが含まれていますが、特別なものはなく、データも含まれていません。かなり高速な専用Linuxサーバーで上記のコマンドを実行すると、完了するまでに最大5分かかります。CPU時間を使用するいくつかのPHPスクリプトのように、バックグラウンドで実行されているプロセスがありますが、他のコマンドや後でDBにデータを挿入する場合のように、他のすべては高速です。それは永遠にかかる創造物です。

これはとても奇妙です、私はここで何が悪いのか全くわかりません。したがって、現時点での私の唯一の手段は、blank.dbを一度作成し、SQLスキーマからインポートするのではなく、そこから新しいコピーを作成することです。

私が何を台無しにしたかについて何か考えはありますか?私は当初、Linuxのnoatime設定がそれを台無しにしていると思っていましたが、いいえ、無効にしても何も変わりませんでした。

必要な構成/データを喜んで提供します。

編集:

This is what strace hangs at:
12:29:45.460852 fcntl(3, F_SETLK, {type=F_WRLCK, whence=SEEK_SET, start=1073741824, len=1}) = 0
12:29:45.460965 fcntl(3, F_SETLK, {type=F_WRLCK, whence=SEEK_SET, start=1073741826, len=510}) = 0
12:29:45.461079 lseek(4, 512, SEEK_SET) = 512
12:29:45.461550 read(4, "", 8)          = 0
12:29:45.462639 fdatasync(4
4

2 に答える 2

1

可能性としては、straceコマンドを使用して何が起こっているかを確認することです。

strace -f -s 1000 -tt sqlite3 newDatabase.db < myschema.sql

どこかにぶら下がっている場合は、表示されます。

あなたのスキーマは巨大ですか?

ノート

  • I/Oディスクが高すぎることについて質問する場合は、コマンドiotop -oPaを試してください。「誰が」システムに混乱をもたらしていることがわかります。
于 2012-11-16T11:13:37.277 に答える
0

さて、私は問題を理解したと思います。

サーバーはバックグラウンドでいくつかのPHPスクリプトを実行しており、CPU負荷に応じて動作するようで、100%で急上昇することがよくありましたが、APT-GETを介してインストールし、新しいSQLITE3データベースをインストールする以外は、他のすべてのコマンドは正常に機能しました。スキーマ。

おそらく問題の原因は、大量のディスクアクセス(IO操作)でした。APCを再インストールし、新しいバージョンにアップグレードして、CLI(デフォルト)では無効になっていることを確認しましたが、実行時間の長いスクリプトがあるため有効にし、あちこちにusleep(100)をいくつか追加しました。

私はすべてのPHPコマンドを停止し、基本的に不要なすべてのプログラムを強制終了しました。MYSQL Workbenchを使用してシステムの使用状況を確認したところ、これが平均値であることに気付くまで、まだ非常に高いように見えました。さらに10分間待つと、平均化されます。私の場合は、負荷が0%に近くなります。完全。

次に、スクリプトを再起動しましたが、現在は問題が発生しているようです。

上記のSQLITE3コマンドを試してみたところ、期待どおりにすぐに機能しました。

したがって、単純な原因:CPU負荷が高いだけでなく、重いIO、ディスクアクセスもあります。

于 2012-11-16T18:35:58.210 に答える