PostgreSQLでクエリの実行を遅くする



投稿のタイトルがおかしいと感じる人もいます。 確かに、彼らの正しい考えで、サーバーでのリクエストの実行を遅くするのはなぜですか?



「長いクエリでクライアントプログラムのインターフェースがどのように機能するかを確認するには」と答えます。 このような問題は、 ERデザイナーの基本構造のインポートの実装中に発生しました。



私の謙虚な意見では、プログラムのインターフェースは、長い要求の間、3つの側面を提供する必要があります:

  1. あらゆる種類の統計とアニメーション(?)でユーザーの目を楽しませます。
  2. ユーザーにクリックさせたり、何か間違ったことをさせたりしないでください。
  3. 一方、長いプロセスを停止する機会を与えることが不可欠です。








もちろん、クライアントプログラムコードにあらゆる種類のスリープ()を挿入することを禁止する人はいませんが、これには何か悪があります。 また、組み込み関数pg_sleep()を使用できます。この関数のパラメーターには、リクエストの実行を停止する秒数を渡すことができます。



SELECT pg_sleep(1.5);
      
      







データベース内のテーブルのリストを返すクエリにブレーキをかけましょう。

 SELECT oid :: regclass FROM pg_class WHERE relkind = 'r'
      
      







例1



FROMセクションにpg_sleep()呼び出しを配置できます。

 SELECT oid::regclass FROM pg_class, pg_sleep(10) WHERE relkind = 'r'
      
      





この場合、関数は1回だけ実行され、合計実行時間は約10秒になります。 さらに、データセット全体がすぐに全体として返されます。



例2



SELECTセクションにpg_sleep()呼び出しを配置できます。

 SELECT oid::regclass, pg_sleep(1) FROM pg_class WHERE relkind = 'r'
      
      





同じ場合、関数はデータセットの各行に対して1回実行されます。 つまり、データベースにあるテーブルと同じ回数。 このアプローチには、もう1つの利点があります。 非同期の要求処理を使用すると、たとえばこの方法またはその方法で 、文字列を1つずつ取得し、ゆっくりとクロールする進行状況バーをユーザーに表示できます。



あなたに最高!



UPDこの機能を思い出させてくれた Szymon Guzに感謝します。



All Articles