株式会社エーツー システム部 加藤
株式会社エーツー システム部 加藤
2009年 11月 13日 (金) 15:49:22 JST
加藤と申します。お世話になります。 この度は、ご報告と、できれば解決案のご提示をいただきたいと思い、MLに参加させていただきました。 PostgreSQL 8.1.11 の環境で、ludia 1.5.2 Senna1.1.4を利用させていただいております。 検索対象としたいカラムにはfulltextbのindexを作成しています。 現在、このfulltextbのindexを作成しているカラムが存在するテーブルに対して、更新のクエリを送信すると、deadlockが発生してしまう状態です。 原因は、更新クエリの際に獲得されるAccessExclusiveLockと、検索の際に獲得されるAccessShareLockの競合です。 このfulltextbのindexを作成しているカラムは、検索される頻度も高いカラムです。 AccessExclusiveLockが獲得されてしまう理由については、調査していただいた結果、fulltext、fulltextb、fulltextuのindexタイプでは、pg_amのamconcurrentフラグがfalseになっているためだとわかりました。 amconcurrentフラグについては、以下のような説明が書いてあります。 http://www.postgresql.jp/document/pg811doc/html/index-locking.html >amconcurrentが偽の場合でもPostgreSQLはインデックススキャン中にAccessShareLockを獲得しますが、更新時にはAccessExclusiveLockを獲得します。 このように、AccessExclusiveLockが獲得されてしまう状況では、deadlockに陥ってしまうことと、更新のクエリが終わるのを検索のクエリが待ってしまうため、プロセスが溜まってデータベースに負荷がかかってしまうことが問題です。 この問題について、Ludia側でのご対応は期待できますでしょうか? よろしくお願いいたします。 -- ************************************************ 加藤 豊 yutak****@a-too***** 株式会社エーツー システム部 〒422-8064 静岡県静岡市駿河区丸子新田317-1 TEL 054-268-3013 / FAX 054-268-3014 ************************************************