私たちは、私たちがデータに対してどのように動作するかを見たいところで、MySQLの小さなベンチマークを行っています。複数のスレッドから同時にMySQLにアクセスする方法
このテストの一部は、複数の同時スレッドがさまざまなクエリを使用してサーバーをハマるときの動作を確認することです。
MySQL documentation(5.0)は、マルチスレッドクライアントについてはっきりしていません。私はプリペアドステートメントを使用して、読み取り(SELECT)及び(DELETE、UPDATE、INSERT)を書き込みの両方を行うよ(libmysqlclient_r.so
)私は、スレッドセーフライブラリに対してリンクを行うことを
を指摘しなければなりません。
- スレッドごとに1つの接続を開く必要がありますか?もしそうなら:どうすればいいのですか?
mysql_real_connect()
は、私がmysql_init()
と呼んだときに元のDBハンドルを返すようです。 - もしそうなら:代わりに
mysql_affected_rows
のような結果とメソッドが正しい値を返すようにします他のスレッドの呼び出しと衝突する(ミューテックス/ロックが機能する可能性がありますが、間違っていると感じます)
これはちょうど私が必要とした答えの種類でした。私は各スレッドでmysql_initを呼び出さなければならないことに気づいていませんでした。私はmain()で一度だけ実行しました。ありがとうございます –
@chazomaticus、あなたは通常どのくらいのスレッドを使用していて、いくつの接続を開いていますか?これは、多数のスレッド/接続に拡張されますか? (100〜1000)のスレッドをたくさん持っていて、1000の接続を開くのに必要なオーバーヘッド(max_connectionsのデフォルト値は通常100に設定されているため、アクセス許可を得られない可能性があります)を必要としない場合は、あなたがスレッドの数が少ない場合、あなたのアプローチはうまくいくでしょう。コード例を表示するために私から+1。 – Glen
Isakは可能な限り多くのスレッドをDBにストレスしようとしています。私は〜1000の問題なしで実行しました(すべてのスレッドが問題クエリである場合、ほとんどの時間は 'poll()'でアイドル状態になります)、チャンクを食べることはできますが、CPU集約的ではありませんのメモリ)。 max_connectionsについては、デフォルトで100に設定されているので、最大限のストレスになるように、必要に応じて上限を設定してください。 – chazomaticus