我正在使用此 T-SQL 来获取索引统计信息(为简洁起见进行了编辑):
SET @db_id = DB_ID(N'TestDB');
SET @object_id = OBJECT_ID(N'TestDB.dbo.Users');
SELECT * FROM sys.dm_db_index_physical_stats(@db_id, @object_id, NULL, NULL , 'LIMITED');
Run Code Online (Sandbox Code Playgroud)
我希望能够将它封装到一个存储过程中,并为存储过程所在的任何数据库调用它,但数据库名称是硬编码的,如何动态获取数据库名称?
T-SQL 有没有类似的东西:
SET @db_id = DB_ID(this);
这应该是一个非常简单的查询,但老实说,我认为它的执行时间可以改进。
select idTag,MAX(pctimestamp) AS PCTIMESTAMP,getdate() AS NOW, datediff(SECOND,MAX(pctimestamp),getdate()) AS DELAY
from ValuesTagsOPC
group by IdTag
Run Code Online (Sandbox Code Playgroud)
此查询从“ValuesTagsOPC”表返回 1386 行,该表包含大约 4000 万行,并具有以下结构,由创建脚本检索:
CREATE TABLE [dbo].[ValuesTagsOPC](
[IdTag] [int] NOT NULL,
[TTimeStamp] [datetime] NOT NULL,
[PCTimeStamp] [datetime] NOT NULL,
[Value] [nvarchar](50) NOT NULL,
[Quality] [int] NOT NULL,
CONSTRAINT [PK_ValuesTagsOPC] PRIMARY KEY CLUSTERED
(
[IdTag] ASC,
[PCTimeStamp] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
Run Code Online (Sandbox Code Playgroud)
很明显,它的主键上有一个聚集索引。SQL Server 的时间和 IO 统计信息如下(抱歉,它是西班牙语):
(1386 …Run Code Online (Sandbox Code Playgroud) 我无法将 ODBC 64 位驱动程序与在 SQL Server 2012 64 位实例上运行的 SSMS 2012 一起使用。但是,我相信 32 位驱动程序可以工作。
我的问题是我可以使用 SSMS 2005 32 位在 SQL Server 2012 的 64 位实例上使用 ODBC 创建链接服务器吗?我尝试这样做,但是当我单击“确定”以创建链接服务器时,我收到了消息:
索引超出数组范围
我在做什么完全错误,或者有什么方法可以使用 32 位 ODBC 连接创建此链接服务器?
我有一个 SQL 脚本,当我想查看数据库中发生的事情时运行该脚本。该脚本有许多从 DMV 返回信息的查询,但我最常用的两个是“请求”(sys.dm_exec_requests、sys.dm_exec_sessions等)和“锁”(sys.dm_tran_locks)。输出类似于 SQL Server 活动监视器,但它显示更多信息。
有时,请求会出现在 Requests 查询中,但它会在 Locks 查询运行之前完成。例如,Requests 查询可能显示 SPID 51 正在等待锁定资源,但 Locks 查询不包含 SPID 51 的任何锁定信息。(我知道来自的wait_type和wait_resource列sys.dm_exec_requests。)
有没有办法确保这两个单独的查询显示数据库活动的连贯快照?
我预计商业数据库监控应用程序一定会遇到同样的问题。
我已经尝试在 SERIALIZABLE 并发中运行这些查询并向 DMV 连接添加锁定提示,但查询未获取锁定。无论如何,我不想在生产中这样做。
到目前为止,我最好的想法是:
从不同的会话同时运行这些查询。
在一个查询中加入请求和锁。考虑到我一次看到超过 100,000 个锁,这个连接会返回很多重复的请求和会话数据,但它可能会起作用。
我对扩展事件不够熟悉,不知道它们是否会更好地工作——也许是事件配对?
我想完全为商业智能功能实现 SQL Server 2012:SSIS、SSAS 和 SSRS 在它自己的服务器上。
我目前在另一台服务器上安装了 SQL Server 2008R2 数据库引擎。它由供应商维护,因此无法升级到 2012。
根据我在 SQL Server 20102 商业智能工具中的理解,您可以使用 2008R2 数据库作为数据库目标/源。理想情况下,我希望能够创建 2012 BI 项目:SSIS、SASS 和 SRSS,并将解决方案部署到 Sql Server 2012,但转换 2008R2 数据库中的数据。
这个设置可以吗?如果是这样,除了许可之外,还有什么缺点或潜在问题吗?
sql-server business-intelligence sql-server-2008-r2 sql-server-2012
有简单的Int Identity我PK。
表有 220 万行。
删除了零行,从未禁用身份。
一次通过 .NET 插入一行,每次插入都检索SCOPE_IDENTITY().
20 与它的一些 FK 关系。
我有 98% 的碎片。
知道是什么原因造成的吗?
我知道修复是重建,今晚会这样做。
我想知道如何避免它。
自从填充以来,我已经添加了 3 列。
一些列几乎修改了每个值。
属性的长度没有太大变化。
表定义
/****** Object: Table [dbo].[docSVsys] Script Date: 02/13/2013 15:52:46 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_PADDING ON
GO
CREATE TABLE [dbo].[docSVsys](
[sID] [int] IDENTITY(1,1) NOT NULL,
[sParID] [int] NULL,
[docID] [varchar](100) NOT NULL,
[attBeg] [varchar](100) NULL,
[attEnd] [varchar](100) NULL,
[docDate] [smalldatetime] NULL,
[addDate] [smalldatetime] NOT NULL,
[mimeType] [varchar](40) …Run Code Online (Sandbox Code Playgroud) 因为我们遇到了与http://social.msdn.microsoft.com/Forums/en/sqlintegrationservices/thread/e51b775a-8601-491b-8ad4-a71b0f0d59ce 中相同的问题,所以我们有以下问题:那是从平面文件源我们 wmi 是文件的最后一行。
你能告诉我们在哪里可以找到高级列视图以将文本限定设置为 false 吗?提前致谢。
我有一个应用程序,它记录了一个错误,如
Object <obj id> generated an exception.
Run Code Online (Sandbox Code Playgroud)
该应用程序将其所有信息存储在包含 100 多个表的 SQL Server 数据库中。
肯定在某个地方必须有一个包含这种类型的所有对象的表,我确定obj id那里是关键列。
我怎样才能找到这个对象?我是否必须创建 100 多个SELECT查询来查询每个表,或者可能有更方便的解决方案?
我继承了一个数据库,其中没有在表上定义主键。也没有分配给表的聚集索引。
如果我执行一个更改表来分配主键,这会导致 SQL Server 也创建聚集索引吗?如果是这样,由于数据在硬盘上重新定位,我应该期望数据库速度变慢吗?
我正在尝试确定为审计目的设计表格的最佳方式。基本上,我在一张表中为许多用户记录了几个最后的事件。每个用户的记录数有限制。新记录来了,旧记录走了。
像这样的东西:
CREATE TABLE Audit
(
UserId INT NOT NULL,
EventId INT NOT NULL,
CreationDate DATETIME NOT NULL,
UpdateDate DATETIME NULL,
-- Other data fields
)
Run Code Online (Sandbox Code Playgroud)
问题是如何处理索引。我正在考虑在(UserId, EventId). 但是由于用户活动是独立发生的,这意味着在表中间插入并在表中间删除。恐怕不好。
另一个想法是添加一个人工AuditId字段只是为了让新记录的数量增加。像这样:
CREATE TABLE Audit
(
Id INT, -- Becomes the clustered index
-- The same as above
)
Run Code Online (Sandbox Code Playgroud)
这样,新的审计条目将被附加到末尾,但删除仍将发生在表的中间。它可能比第一个选项更好,但我不确定。
该表将被频繁使用,基本上每个用户活动都会被记录(1 次插入),并且最早的活动会在同一个事务中被删除(1 次删除)。这需要快速。好吧,我希望它在理想情况下是即时的,并且在性能方面不明显。
我还需要能够快速检索特定用户的记录集。它可能会被非聚集索引覆盖。
我正在寻求设计此表以获得最佳性能的建议。
编辑:我想我错过了一些重要的事情要提。
我试图追踪的不是瞬时的,而是一段时间内的。系统中有几个地方我需要这个。考虑用户正在做的某种活动可能会跨越某个时间段。如果满足某些条件,则重新使用(刷新、更新)现有活动。我只想删除旧的废弃活动。例如,在 2 周内,一个用户可能已经发布了 50 个活动,但对于另一个用户来说,产生的活动可能需要一年多的时间。这就是为什么我不希望所有用户一起使用一般有序的日志。
也不清楚我应该如何按日期时间进行聚类(如建议的那样)。我是在初始创建事件还是在更新事件上执行此操作?