SQLiteでは、SELECT
を使用して1つのデータベースからデータを読み取り、いくつかの変更を行い、別のデータベースに書き込んでいます。I/Oは読み取りによってバインドされていますか?最適化する方法は?
iotop
の出力を見ると、(1つのコアのみを使用する)プロセスのパフォーマンスはI/Oバウンド(IO> 80%、CPU < 20%)です。私がiotop
で見ることができる行動の大半は 'DISK READ'の下で行われており、今はたびに 'DISK WRITE'の下に何かが表示されています。
プロセスのパフォーマンスは、SELECT
/読み取りトランザクションによって拘束される可能性はありますか?基本的に、私がウェブ上で見るSQLiteのすべてのパフォーマンス関連情報は約INSERT
/writeです。データの読み取りについて知り、最適化するための何かがありますか?
索引が欠落しているフィールドでのSELECTによる非効率的な問合せは、CPUよりもIOに強い影響を与えますか?
多くの書き込みがある場合、それらを1つのトランザクションにマージして最適化することができます。読み取りを最適化するのは難しいです... –
この質問はあまりにも幅広いです。特定のクエリをスピードアップしたい場合は、そのクエリについて質問してください。 –
開始する前に、読んでいるデータベースをRAMディスクに置くことを検討してください。 –