0

SQLite Web ページからの引用 "VACUUM コマンドを実行する直前に page_size プラグマを使用して新しいページ サイズを指定し、データベースが WAL ジャーナル モードでない場合、VACUUM はページ サイズを新しい値に変更します。"

私の SQLite 3.7 データベースは 1024 ページ サイズで実行されています。Windows を使用しているので、4096 を試してみてどうなるか見てみようと思いました。私は一生それを変えることはできません。誰かが私のコードを見て、私がどこで失敗したか教えてください。ありがとう

 Dim connection As New SQLite.SQLiteConnection(conectionString)
            connection.Open()
            Dim oMainQueryR As New SQLite.SQLiteCommand
            oMainQueryR.Connection = connection
            oMainQueryR.CommandText = ("PRAGMA page_size=4096")
            oMainQueryR.ExecuteNonQuery()

            oMainQueryR = New SQLite.SQLiteCommand
            oMainQueryR.Connection = connection
            oMainQueryR.CommandText = ("vacuum")
            oMainQueryR.ExecuteNonQuery()
            connection.Close()

バキュームコマンドは、ページサイズをリセットしないというだけで問題なく実行され、WALを実行していません

4

1 に答える 1

0

問題は暗号化でした。それを取り除くと、コードは次のように機能します。考えさせてくれたCLに感謝!暗号化がない場合は、ChangePasswords への 2 つの参照を削除してください。興味深いことに、ページ サイズをデフォルトの 1024 から 4096 に設定すると、データベースは約 10% 増加しました。

        Dim connection As New SQLite.SQLiteConnection(conectionString)
        connection.Open()
        connection.ChangePassword("")
        Dim oMainQueryR As New SQLite.SQLiteCommand
        oMainQueryR.Connection = connection
        oMainQueryR.CommandText = ("PRAGMA page_size=") & Val(Me.TextBox254.Text) & "; vacuum"
        oMainQueryR.ExecuteNonQuery()
        connection.ChangePassword(previous password)

        connection.Close()
于 2012-09-24T03:24:46.267 に答える