web-dev-qa-db-ja.com

SQL Server 2005 tempdbバッファラッチタイプ4(ページ番号)の待機中にタイムアウトが発生しました

非常によく似たエラーで、過去2日間に3つの別々のプロセスが失敗しました:

_Time-out occurred while waiting for buffer latch type 4 for page (1:1189832), 
database ID 2.

Time-out occurred while waiting for buffer latch type 4 for page (1:1189827), 
database ID 2.

Time-out occurred while waiting for buffer latch type 4 for page (1:1189827), 
database ID 2.
_

2つはまったく同じで、もう1つはわずかに異なるページ番号にアクセスしています。データベース#2はtempdbです。私はDBCC PAGE(tempdb, 1, 1189827, 1)を実行しようとしましたが、出力は意味不明です。私はかなり迷っています。

誰かがこれらのタイムアウトの根本的な原因が何であるかを知っていますか? (私は他のフォーラムで何十もの提案を見てきましたが、その中にはメモリ破損があります)

どんな助けでも大歓迎です。 _DBCC PAGE_の出力を読みたい場合は、質問してください。投稿します。

3
Aushin

2005以降を実行している場合は、以下の2つのスクリプトを実行し、出力を元の質問に追加します。

SELECT
    DB_NAME(fs.database_id) AS [Database Name]
  , mf.physical_name
  , io_stall_read_ms
  , num_of_reads
  , CAST(io_stall_read_ms / (1.0 + num_of_reads) AS NUMERIC(10, 1)) AS [avg_read_stall_ms]
  , io_stall_write_ms
  , num_of_writes
  , CAST(io_stall_write_ms / (1.0 + num_of_writes) AS NUMERIC(10, 1)) AS [avg_write_stall_ms]
  , io_stall_read_ms + io_stall_write_ms AS [io_stalls]
  , num_of_reads + num_of_writes AS [total_io]
  , CAST((io_stall_read_ms + io_stall_write_ms) / (1.0 + num_of_reads
                                                   + num_of_writes) AS NUMERIC(10,
                                                              1)) AS [avg_io_stall_ms]
FROM
    sys.dm_io_virtual_file_stats(NULL, NULL) AS fs
INNER JOIN sys.master_files AS mf
ON  fs.database_id = mf.database_id
    AND fs.[file_id] = mf.[file_id]
ORDER BY
    avg_io_stall_ms DESC
OPTION
    (RECOMPILE) ;

WITH Waits AS 
(
SELECT
wait_type
, wait_time_ms / 1000. AS wait_time_s
, 100. * wait_time_ms / SUM(wait_time_ms) OVER () AS pct
, ROW_NUMBER() OVER (ORDER BY wait_time_ms DESC) AS rn
FROM
sys.dm_os_wait_stats
WHERE
  wait_type NOT IN (
  'CLR_SEMAPHORE',
  'LAZYWRITER_SLEEP',
  'RESOURCE_QUEUE',
  'SLEEP_TASK',
  'SLEEP_SYSTEMTASK',
  'SQLTRACE_BUFFER_FLUSH',
  'WAITFOR',
  'LOGMGR_QUEUE',
  'CHECKPOINT_QUEUE',
  'REQUEST_FOR_DEADLOCK_SEARCH',
  'XE_TIMER_EVENT',
  'BROKER_TO_FLUSH',
  'BROKER_TASK_STOP',
  'CLR_MANUAL_EVENT',
  'CLR_AUTO_EVENT',
  'DISPATCHER_QUEUE_SEMAPHORE',
  'FT_IFTS_SCHEDULER_IDLE_WAIT',
  'XE_DISPATCHER_WAIT',
  'XE_DISPATCHER_JOIN',
   'SQLTRACE_INCREMENTAL_FLUSH_SLEEP')
 )
SELECT
    W1.wait_type
  , CAST(W1.wait_time_s AS DECIMAL(12, 2)) AS wait_time_s
  , CAST(W1.pct AS DECIMAL(12, 2)) AS pct
  , CAST(SUM(W2.pct) AS DECIMAL(12, 2)) AS running_pct
FROM
    Waits AS W1
INNER JOIN 
    Waits AS W2
ON  W2.rn <= W1.rn
GROUP BY
    W1.rn
  , W1.wait_type
  , W1.wait_time_s
  , W1.pct
HAVING
    SUM(W2.pct) - W1.pct < 99
OPTION (RECOMPILE) ;
4