10-03-17 MySQL
MySqlは、Webサーバーのバックエンドとして広く使われている、検索が速い有名なRDBプログラムです。
開発の中心は、フィンランドのMichael Widenlus(通称Monty)、スエーデンのDavid Axmark、Allan Larssond で、1995年にリリース。 自分の関わった導入は、

導入事例1

運用開始。2003年5月、使用リリース 3.23.49-3 。 アプリケーションは、小売業のPOSデータの検索用データベース。 検索用単品データベースは、950万行。 その後、アプリケーションは、発注インプットや、仕入データ等のインプットと拡大。 最近の出来事 5年近く、毎晩動いていたバッチ処理の一つが異常。 あるバッチ・プログラム(perl)で、データベースをconnectすると、普段は、うまくいくのに、この時は、connectが出来ず、エラーメッセジ 「Can't connect to local MySQL server」 が出た。翌日、同じプログラムをリランしたら、正常に処理を実行した。数日して、またこの異常が出た。原因が分からず。 ただ、 (1)このバッチ処理の前に実行しているバッチ処理(perl)でも、このバッチ処理と同じテーブルを更新しており、その処理時間は数十分かかっていた。つまり、テーブルがこの間「lock」されていた。 (2)夜間にかかわらず、データベースの検索プログラム(php)は実行可能。 (3)データベースの検索プログラム(php)で、検索するテーブルが「lock」されている場合、IEで、検索を中止するか、再呼込みを行うと、「query」がmysqlの処理要求待ちに残ったままで、再呼込を行うごとに、処理要求待ちの「query」が増えていく。 (4)mysqlのmax_connectionsは、defaultの100のままである。(3)の状態では、すぐ100になりそうに見える。 「Can't connect to local MySQL server」の発生理由ははっきりしなかったが、(4)が発生する可能性があるので、対策を考えた。 データベースにconnectするperl文は $db = DBI->connect('DBI:mysql:mydatabase:localhost','user','pw'); です。 この後に、connectができたものとして、処理に必要なsql文等を単純に書いていました。 connect文は最初に書き、普通はうまくいきます。また、バッチ処理をできるだけ単純にしたいとの思いもありました。 しかし、connectできなかった場合は、$dbがnullとなるので、少しsleepしてから、再度connect文を実行するようにしました。

導入事例2

運用開始。2004年12月、使用リリース 3.23.49-3 。 アプリケーションは、小売業のレジ精算。 その後、アプリケーションは、店舗のもろもろデータのインプットと拡大。
copyright (c) itworks.co.jp All right reserved.