【问题标题】:Queries against INFORMATION_SCHEMA time out针对 INFORMATION_SCHEMA 的查询超时
【发布时间】:2012-07-16 21:07:56
【问题描述】:

我正在使用 SQL Server 2008 Management Studio 连接到 SQL Server 2000。

use [MyPrettyDb]
select top 19 * from information_schema.tables

它工作得很好,又甜又快。但是这个:

select top 20 * from information_schema.tables

超时停止。

超时的原因是什么?

附: select count(*) from information_schema.tables 快速返回;数据库中有334张表。

【问题讨论】:

  • 你对比过两个案例的执行计划了吗?
  • 为什么要从目录视图中获得 19 或 20 个 随机 行?或许您可以考虑添加一个ORDER BY 来为您的查询赋予一些意义。
  • 不可能。查询计划超时
  • 好的。 select top 19 * from information_schema.tables order by table_name - 效果很好。但是从 information_schema.tables 中按 table_name 顺序选择前 20 个 * - 超时
  • 另外我可以补充一点:硬件没问题。大量磁盘空间和 54% 的内存使用率。

标签: tsql timeout sql-server-2000 information-schema


【解决方案1】:

您可能被事务中运行的 DDL 语句阻塞。运行 DBCC OPENTRANsp_lock 以确定哪个会话对此负责。

您可以通过运行以下脚本来重现这一点。

USE TEMPDB
GO

BEGIN TRAN
CREATE tABLE ttt(id int)

在另一个会话中,运行

SELECT TOP 5 * FROM INFORMATION_SCHEMA.TABLES --will work

SELECT  * FROM INFORMATION_SCHEMA.TABLES --will not work

【讨论】:

    【解决方案2】:

    我自己解决了这个问题。 该问题仅存在于 Windows 2008 中。并且 32/64 冲突。

    Windows 2008 中有两个 odbc 驱动程序: 32:在 System32 文件夹(或系统)中 64:在系统系统WOW64中

    据我了解,默认情况下它使用 64 版本。但它与远程机器上的 32 版本不兼容。这就是为什么我有奇怪的行为。

    运行 odbc wizzard friom 32 文件夹,它神奇地变得正常工作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-07-31
      • 2017-04-01
      • 1970-01-01
      • 2011-06-21
      • 2017-11-15
      • 2011-02-12
      相关资源
      最近更新 更多