2009-05-30 5 views
1

私は、csvファイルを処理し、その内容をPostgreSQLデータベースのテーブルに挿入するPHP CLIスクリプトを持っています。これはUbuntuサーバー上にあります。私はschedtoolを使ってスクリプト全体の親和性を制御しています。 Schedtoolを使用して、スクリプト自体を-eオプションで起動します。残念ながら、htopでは、データベーススレッドが完全に異なるスレッドとして生成され、アフィニティオプションの影響を受けていないことがわかりました。Postgresqlプロセスをspawner PHPスクリプトで制御することができますか?

それは何らかの形でデータベース・プロセスが産卵PHPスクリプトからのすべての親和性のオプションを継承させることは可能ですか?


私はちょうどその答えを見つけました。私がRuby用のいくつかのPostgresqlサンプルファイルを読んでいたためです。 LISTEN -

私の最良の選択はNOTIFYで、現在のスクリプトを実行しているPostgreSQLのスレッドの非常に正確なPIDを取得することです。 [depesz]によると、Postgresはコアを1つだけ使用しています。 schedtoolでは、私はまだそれが実行するコアを制御することができ、cpulimitでさらに制御することができます。

答えて

0

Postgresはスレッドを使用しません。各接続は、単一のスレッドプロセスによって処理されます。したがって、1つの接続で1つのコアしか使用できません。 OSはそれを別のコアに移動することができますが、一度に1つだけ使用します。

ポストグレーシングを主張している場合、 "SELECT pg_backend_pid()"は、NOTIFY/LISTENの何もせずにpostgresプロセスのPIDを与えます。一般的に、あなたはポストグルのプロセスをうまくやってみるつもりはありません。優先度の高い他のプロセスをブロックする可能性があります。それでは、優先度の低いプロセスだと思ったことは、もはや優先順位がそれほど低いわけではありません。

あなただけおそらくあまり助けにはなりませんスクリプトをnicing、CSVファイルからの挿入の束をやっている場合。 Postgresはおそらくもっと多くの作業をしているでしょうし、それはおそらくIOです。あなたは、しかし、しばらくのうちに寝ることができます。 50ミリ秒間の挿入、しばらくの睡眠...

+0

ありがとうございました!私はもう一度学んだことがあります:)今、私はスクリプトを再構成し、新しい考えを適応させます。 – Ikon

0

Postgresのバックエンドは常にポストマスタープロセスから生み出されるので、Postgresのバックエンドに(すなわちあろう何でも)PHPスクリプトからオプションの親和性を渡す方法はありません。一方

は - ことを意味するものではありません、一般的な解決策がないという事実 - あなたは親和性があるかを説明したい、とあなたが設定したいオプションの種類が/多分解決策があり、合格しますいくつかのものに特化した解決策はありません。

+0

確かに。 Schedtoolは、特定のプロセスのCPUスケジューリングパラメータを設定します。たとえば、私の場合は、私のCPU上で2の1コアだけを使用するようにプロセスを設定しました。これは親和性と呼ばれます。私はNICEレベルも設定できます。より多くの読み取りのために :http://linux.die.net/man/8/schedtool – Ikon

+0

クライアントアプリケーションは、サーバー上の素敵なレベルを設定することはできません - あなたの状況のPHPアプリにPostgreSQLのバックエンドでの素敵なレベルを設定することはできません。 アプリケーションが1つまたは2つのコアを使用できるかどうかを設定する場合、1つのPostgreSQLバックエンドは常に1つのコアのみを使用するため、多くのポイントはありません。 –

+0

これは、常に1つのコアだけを使用するので、別のポストグルスレッドを気にする必要はありませんか? 私の目標は全体的な負荷を最小限に抑えることです。この問題(Postgresのロードバランシング)に関するいくつかのドキュメント、チュートリアルをお勧めしますか? – Ikon

関連する問題