在过去两天中,有三个单独的进程失败了,并且有非常相似的错误:
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是tempdb。我试着运行DBCC PAGE(tempdb, 1, 1189827, 1),但是输出对我来说只是胡说八道。我很迷茫。
有人知道这些超时的根本原因是什么吗?(我在其他论坛上见过许多建议,其中包括内存损坏)
任何帮助都将不胜感激。如果您想要阅读DBCC PAGE输出,请询问,我将发布它。
发布于 2011-07-29 13:37:26
当您抽出dbcc页面并尝试查看该页面时,它可能(可能)会被用于其他东西。毕竟,这就是诱饵。
从SQL6.5开始,我就一直处于这种状态,而且我只见过这种类型的页面超时是由缓慢或配置错误的存储造成的。我能立即记起的每一件事,都是一件好事。如果你有一个SAN,你一定要和你的SAN /gal谈谈,看看他们是否看到了系统上的异常负载,或者他们最近是否改变了什么。例如,我见过片状光纤开关和电缆的问题,或者它们最近把你的数据转移到了较慢的磁盘上。
除此之外,仔细看看你的驱动器,SAN或其他。请查看“Avg.DiskSEC/Read”和“Avg.DiskSEC/Read”驱动器的编号,这些数字是当发生事件时存储在tempdb文件上的,最好是在出错时。查看字节/秒数也是很有帮助的,以了解要求驱动器做什么(要求只推1MB/秒的1000 ms延迟数的驱动器是一回事,当按10 MB/s时,延迟50 ms的驱动器是另一回事)。
如果驱动器不堪重负,您可能需要减少进入驱动器的I/O。策略包括将tempdb文件移动到另一个设备,在其他设备上创建额外的tempdb数据文件,调优查询(任何不必要的组或不同的?),将存储设备上的任何数据文件移动到其他地方,等等。
发布于 2011-07-29 14:25:03
如果您正在运行2005+,请运行下面的两个脚本并将输出添加到您原来的问题中。
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) ;https://dba.stackexchange.com/questions/4194
复制相似问题