none
SQL実行時のEXCEPTION_ACCESS_VIOLATIONについて RRS feed

  • 質問

  • [現象]
    tempdb(#テーブル)を更新するストアドプロシージャを実行すると、
    SQLServerでAccess violationが発生し処理が強制終了されてしまうことがある。
    100%の確率では発生しない。起きるときと起きないときがある。
    SP1を導入済みで本番稼働中。SP2,3はあてることはほぼ不可能。
    現象を回避するSQLの記述方法があれば助かります。

    [環境]
    Windows Server 2003 x86
    Microsoft SQL Server 2005 SP1

    [DUMPの一部]
    =====================================================================                                           
           BugCheck Dump                                                                                            
    =====================================================================                                           
                                                                                                                    
    This file is generated by Microsoft SQL Server                                                                  
    version 9.00.2156.00                                                                                            
    upon detection of fatal unexpected error. Please return this file,                                              
    the query or program that produced the bugcheck, the database and                                               
    the error log, and any other pertinent information with a Service Request.                                      
                                                                                                                    
                                                                                                                    
    Computer type is AT/AT COMPATIBLE.                                                                              
    Bios Version is PTLTD  - 6040000                                                                                
    Ver 1.00PARTTBL                                                                                                 
    Current time is 11:16:54 10/24/09.                                                                              
    8 Intel x86 level 6, 3000 Mhz processor (s).                                                                    
    Windows NT 5.2 Build 3790 CSD Service Pack 1.                                                                   
                                        
    Memory                              
    MemoryLoad = 93%                    
    Total Physical = 12286 MB           
    Available Physical = 789 MB         
    Total Page File = 30494 MB          
    Available Page File = 18809 MB      
    Total Virtual = 2047 MB             
    Available Virtual = 259 MB          
    ***Stack Dump being sent to K:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\LOG\SQLDump0002.txt             
    SqlDumpExceptionHandler: Process 8140 generated fatal exception c0000005 EXCEPTION_ACCESS_VIOLATION. SQL Server i
    s terminating this process.                                                                                     
    * *******************************************************************************                               
    *                                                                                                               
    * BEGIN STACK DUMP:                                                                                             
    *   10/24/09 11:16:54 spid 65                                                                                   
    *                                                                                                               
    *                                                                                                               
    *   Exception Address = 0100DA43 Module(sqlservr+0000DA43)                                                      
    *   Exception Code    = c0000005 EXCEPTION_ACCESS_VIOLATION                                                     
    *   Access Violation occurred reading address 0000000C                                                          
    * Input Buffer 200 bytes -                                                                                      
    *               DECLARE @rc As Integer;EXEC @rc = dbo.SW_ST_CreateSweepSlip                                     
    *  NoIndexTableArAp;select @rc;                                                                                 
    *                                                                                                               
    *                                                                                                               
    *  MODULE                          BASE      END       SIZE                                                     
    * sqlservr                       01000000  02BD0FFF  01bd1000                                                   
    * ntdll                          7C950000  7CA29FFF  000da000                                                   
    * kernel32                       7C800000  7C940FFF  00141000                                                   
    * MSVCR80                        78130000  781CAFFF  0009b000                                                   
    * msvcrt                         77B40000  77B99FFF  0005a000                                                   

    2009年11月4日 7:54

回答

  • EXCEPTION_ACCESS_VIOLATION が発生する前に、何か他のエラーは出ていなかったでしょうか。

    尚、EXCEPTION_ACCESS_VIOLATION の調査は、出力された ミニダンプ情報のスタック情報を確認する必要があります。
    ただ、一般にSQL Serverのシンボルは公開されていないので、EXCEPTION_ACCESS_VIOLATION の調査を実施したい場合は、サポートに問い合わせる必要があると思います。

    後、定かでは無いのですが、TempDB 関連における改修が、SP2、SP3にあったと思います。
    今回、SP2、SP3 を適用出来ないというのであれば、対策としては、一時テーブルを使用しないということになるかもしれません。
    • 回答としてマーク 菊地俊介 2009年11月20日 8:34
    2009年11月7日 0:20

すべての返信

  • EXCEPTION_ACCESS_VIOLATION が発生する前に、何か他のエラーは出ていなかったでしょうか。

    尚、EXCEPTION_ACCESS_VIOLATION の調査は、出力された ミニダンプ情報のスタック情報を確認する必要があります。
    ただ、一般にSQL Serverのシンボルは公開されていないので、EXCEPTION_ACCESS_VIOLATION の調査を実施したい場合は、サポートに問い合わせる必要があると思います。

    後、定かでは無いのですが、TempDB 関連における改修が、SP2、SP3にあったと思います。
    今回、SP2、SP3 を適用出来ないというのであれば、対策としては、一時テーブルを使用しないということになるかもしれません。
    • 回答としてマーク 菊地俊介 2009年11月20日 8:34
    2009年11月7日 0:20
  • NOBTA様
    返信有り難う御座います。

    EXCEPTION_ACCESS_VIOLATIONの前には特にエラーはありませんでした。
    本番の環境からミニダンプを持ってきて、サポートに問い合わせて見ることにします。

    TempDBは他の処理でも使っていて、そっちの方では全くエラーがでていません。
    どういったケースでTempDBを利用するとエラーになる可能性があるのかが分かれば、
    TempDBを利用したまま回避するSQLが書けて助かるのですが。。。
    SP2,SP3の一時テーブルあたりの情報を集めて調べてみることにします。

    有り難う御座いました。
    2009年11月9日 2:24
  • 皆様、こんにちは。

    NOBTAさん、回答ありがとうございます。

    M.Tsubakiさん、はじめまして。フォーラムのご利用ありがとうございます。
    有用な情報と思われたため、勝手ながらNOBTAさんの回答へ回答マークをつけさせていただきました。

    今後ともフォーラムをよろしくお願いします。
    それでは!
    2009年11月20日 8:36
  • その後の状況ですが、
    Microsoftに問い合わせてみました。

    原因箇所は同期のロック処理でその処理の中で落ちてるとのこと。

    現在のところ、ServicePackの修正には含まれていないが、
    ServicePackを充てることで事象が発生しなくなるのは、
    実行プラン等が変わり上手く行くようになったのでは?
    とのこと、
    並行クエリを行わないオプションを使ってみては?
    とのアドバイスをいただきましたが、
    処理自体がかなり時間の掛かるものだったので
    アルゴリズムの見直しを計りチューニングしたところ、
    本現象が発生しなくなり、ひとまずそのままCloseとしました。

    遅くなりましたが、以上です。
    2009年12月1日 8:37