首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在等待缓冲区锁存类型4(分页)时,出现了Server 2005 tempdb超时

在等待缓冲区锁存类型4(分页)时,出现了Server 2005 tempdb超时
EN

Database Administration用户
提问于 2011-07-29 12:35:11
回答 2查看 6.4K关注 0票数 3

在过去两天中,有三个单独的进程失败了,并且有非常相似的错误:

代码语言:javascript
复制
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输出,请询问,我将发布它。

EN

回答 2

Database Administration用户

发布于 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数据文件,调优查询(任何不必要的组或不同的?),将存储设备上的任何数据文件移动到其他地方,等等。

票数 4
EN

Database Administration用户

发布于 2011-07-29 14:25:03

如果您正在运行2005+,请运行下面的两个脚本并将输出添加到您原来的问题中。

代码语言:javascript
复制
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
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/4194

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档