[前][次][番号順一覧][スレッド一覧]

mysql:9395

From: SUGAWARA Hajime <SUGAWARA Hajime <sugawara@xxxxxxxxxx>>
Date: Thu, 20 May 2004 11:30:18 +0900
Subject: [mysql 09395] Re: 巨大テーブルの高速操作

 菅原です。

"久松大輔" <CQN04630@xxxxxxxxxx>さん:
> > > SELECT 実行中にそのテーブルがロックされ、 INSERTが拒否されているよ
> > > うに思えるのですが、これを回避する方法はないでしょうか?
> >
> > であれば、INSERT時にエラーが返ると思うのですけれど。
> 
> あ、やはりそうなんですか?
> 実は、INSERTはミドルウェアが実行していて、エラーが返っているかどうかは
> 確認できないんです。ですので、SELECTのプライオリティを下げる(上げるの
> はHIGH_PRIORITYがありますけど)か、INSERTに失敗しない設定とかあるとい
> いのですが…。

 そんなミドルウェアは捨てたほうが良いと個人的には思いますけれど。

#「絶対にINSERTに失敗しない」ということは絶対にあり得ないわけですから。
#あるいはエラーを返さないのであれば、ミドルウェア側で
#「絶対にINSERTに失敗しない」ように処理するのが妥当かと。


 それはそれとして<http://dev.mysql.com/doc/mysql/ja/Table_locking.html>
によると、

> MySQL バージョン 3.23.7 以降は、MyISAM テーブルへのレコードの挿入を、
> 他のスレッドが同一テーブルから読み取りを行うのと同時に実行できるように
> なりました。現在のところ、挿入実行時にテーブルのレコード削除後のホール
> がない場合にのみ、この機能が使用可能になるため注意が必要です。すべての
> ホールに新規のデータが入力されると、同時挿入が自動的に再度可能になりま
> す。

とありますから、簡単な解決方法は

    1. DELETEしない。あるいは削除後のホールをなくす。
    2. InnoDBにする。

じゃないかと思います。


 もっとも、個人的にはかなり重いSELECTをしていてもINSERTに失敗した経験は
ないので、何か別の要因があるのではないかという気もします。

-- 
菅原はじめ@うぃーくぽいんと
mailto:sugawara@xxxxxxxxxx

[前][次][番号順一覧][スレッド一覧]

      9387 2004-05-19 15:52 ["久松大輔" <CQN04630] 巨大テーブルの高速操作                  
      9390 2004-05-19 22:45 ┗[SUGAWARA Hajime <sug]                                       
      9392 2004-05-20 09:02  ┗["久松大輔" <CQN04630]                                     
->    9395 2004-05-20 11:30   ┣[SUGAWARA Hajime <sug]                                   
      9397 2004-05-20 11:56   ┃┗[SUGAWARA Hajime <sug]                                 
      9398 2004-05-20 12:48   ┃ ┗["久松大輔" <CQN04630]                               
      9396 2004-05-20 11:46   ┗[SUGAWARA Hajime <sug]