Questions tagged «sql-server-2008»

SQL Server 2008(主要版本10.00.xxxx)。请同时用sql-server标记。

2
如何检查统计信息的最后执行时间?
最近,我们的索引遇到了许多问题,我们的DBA团队将其归因于最近没有运行过的统计信息。这让我感到疑惑-如何检查统计信息是否最近通过SQL Management Studio更新了? 如果这个问题不能很好地解释这个问题,我深表歉意-直到现在,我才被引入统计数据,在此之前,只要遇到性能相关问题,它就会查找索引。 编辑: 我正在使用以下内容,但收到语法错误: use *databasename* exec sp_autostats *schema.tablename* 我收到的错误是: Msg 102, Level 15, State 1, Line 2 Incorrect syntax near '.'. 为什么是这样?

1
为什么计算执行计划需要这么长时间?
我们的一位客户刚刚升级到新服务器。 对于特定的存储过程,首次执行该过程要花费三分钟以上的时间。随后的运行少于1秒。 这使我相信,最初的三分钟主要用于计算执行计划。然后,后续运行只需使用缓存的计划即可立即运行。 在我们的测试数据库上,大约需要5秒钟来计算同一步骤的计划。 我看不出计划本身有什么可怕的-尽管我不认为计划的相关性,因为计划显示了运行查询所花费的时间,而不是计算自身。 该服务器是16核,具有24 GB内存。不会发生繁重的CPU或内存负载。 是什么会导致仅在特定数据库上如此缓慢的计算? 我可以采取什么步骤找到问题的原因? 编辑 因此,我设法访问服务器并使用SET SHOWPLAN_XML ON运行查询。 我可以确认查询的CompileTime占用了查询执行时间的99%。该StatementOptmEarlyAbortReason是“超时”,我们与他们的数据库副本的原因是MemoryLimitExceeded测试数据库。

3
如何在100 GB表上创建聚簇索引
我有一个堆表,该表占用约104 GB的磁盘空间,近30亿行。我正在尝试在[ WeekEndingDate]列上的此表上创建聚簇索引。我在数据文件中有大约200 GB的可用空间,在tempdb中有大约280 GB的可用空间。 我尝试了两种不同的方法。首先是使用以下命令直接在表上创建索引: CREATE CLUSTERED INDEX CX_WT_FOLD_HISTORY ON WT_FOLD_HISTORY (WeekEndingDate ASC) WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = ON, IGNORE_DUP_KEY = OFF , ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, DATA_COMPRESSION = PAGE) 我尝试了SORT_IN_TEMPDB = ON和OFF。使用时,ON它会填满tempdb,并OFF填满数据驱动器。 另一种方法是使用所需索引创建一个新的空白表,然后将堆中的记录插入到新表中。填满数据驱动器后,此操作也失败。 关于该怎么做的其他建议。我读过的大多数内容都表明,在创建索引时,需要大约1.2倍的表大小才能用作工作空间。我有更多的方法,但仍然失败。任何建议,将不胜感激。 这是我原来的堆表结构: CREATE TABLE [dbo].[WT_FOLD_HISTORY]( [WeekEndingDate] …

2
选择从指定值开始直到另一个指定值的行
我有一个包含几个列的表,想要检查一个列值,选择该列值之后的行,直到显示一个单独的列值。我尝试使用BETWEEN,但是如果列值是整数,则仅查找整数之间的数字。 例如,如果我有一个这样的表: id时间值 t1 12:00 PM 15 t1 12:02 PM 4 t1 12:03 PM 7 t1 12:05 PM 16 t5 12:10 PM 250 t5 12:15 PM 15 t8 11:00 AM 15 t8 3:00 PM 2 t8 3:05 PM 100 t2 7:00 PM 15 t2 7:01 PM 16 t15 5:00 AM …

2
为每个更改的行增加一个计数器
我正在使用没有SEQUENCE功能的SQL Server 2008 Standard 。 外部系统从主数据库的几个专用表中读取数据。外部系统保留数据副本,并定期检查数据更改并刷新其副本。 为了使同步高效,我只想传输自上次同步以来已更新或插入的行。(行永远不会删除)。要知道自上次同步以来已更新或插入了哪些行,每个表中都有一bigint列RowUpdateCounter。 这个想法是,每当插入或更新一行时,其RowUpdateCounter列中的数字就会改变。列中的值RowUpdateCounter应取自不断增加的数字序列。RowUpdateCounter列中的值应唯一,并且表中存储的每个新值都应大于任何先前值。 请查看显示所需行为的脚本。 架构图 CREATE TABLE [dbo].[Test]( [ID] [int] NOT NULL, [Value] [varchar](50) NOT NULL, [RowUpdateCounter] [bigint] NOT NULL, CONSTRAINT [PK_Test] PRIMARY KEY CLUSTERED ( [ID] ASC )) GO CREATE UNIQUE NONCLUSTERED INDEX [IX_RowUpdateCounter] ON [dbo].[Test] ( [RowUpdateCounter] ASC ) GO 插入一些行 INSERT INTO …


2
透明数据加密
在SQL Server 2008中配置TDE时是否有最佳实践?在SQLMag上,文章“透明数据加密常见问题解答”说,CPU使用率可能增加了30%? 除了增加服务器功能之外,打开TDE时,DBA通常还会执行其他操作吗?

1
是否可以在没有备用文件的情况下从待机/只读状态恢复SQL数据库?
如果缺少“备用文件”,有什么方法可以从备用/只读模式恢复SQL数据库? (在日志传送方案中,我看到一些引用将其称为TUF文件,但就我而言,这只是手动还原,备用文件具有BAK扩展名。) 进行“ RESTORE DATABASE foo WITH RECOVERY”会导致致命错误: During startup of warm standby database 'foo', its standby file ('path\filename.bak') was inaccessible to the RESTORE statement. The operating system error was '5(Access is denied.)'. Diagnose the operating system error, correct the problem, and retry startup. 恢复是在前一段时间完成的,不幸的是,备用文件位于备份文件夹中,并被我们的文件夹清理例程删除。该文件的副本在任何其他媒体上均不存在。还原到这一点的原始备份也早已消失。 幸运的是,这对我们来说不是什么大问题(这是临时还原),但是除了“不删除该文件”之外,我找不到关于此问题的其他有用参考。 如果涉及到它,我想我可以编写整个数据库的脚本,或者使用SSIS将所有对象复制到一个新的数据库容器中,因为我前面有数据库的只读副本。 有什么办法解决这个问题?我当然不希望自己能够将其翻转回“还原”状态并继续执行后续的还原操作或其他任何操作,我只是想将其强制为当前状态的正常在线模式,这样我才能例如更改权限,更改恢复模式或进行新的完整备份等。

1
每秒非常高的交易
我们的生产服务器平均每秒运行4,000个事务。在过去几天中,平均数量已跃升至每秒175,000个事务。那不是打字错误,是每秒175K。 在查看交易的DMV时,我们无法将其直接链接到用户会话,但是我们看到了: SELECT NAME, COUNT(*) FROM sys.dm_tran_active_transactions GROUP BY NAME ORDER BY 2 DESC - +------------------------------+-------+ | Name | Count | +------------------------------+-------+ | WorkFileGroup_fake_worktable | 627 | | LobStorageProviderSession | 217 | | workfile | 171 | +------------------------------+-------+ 谁能阐明这些类型的交易?还是我在这里追鬼?

3
意外更改数据库名称(SQL Server 2008)
还没有发生在我身上。但是我在想这个。 我在搞乱我的培训环境,错误地单击了数据库名称,然后触摸了字母A。 假设我按下Enter键。现在数据库称为A,我不记得原来的名字了。CTRL + Z不起作用。 在生产环境中,在这种情况下该怎么办? 我知道这不会发生,因为数据库未设置为“单用户”。但是,如果发生这种情况。该怎么办?为了论证,让我们说这是一个没有人使用的数据库。


9
错误:无法生成SSPI上下文
当某人尝试连接到SQL Server实例时,出现错误: 不可能生成SSPI上下文。 昨天我们停电了(不知道该用英语怎么说),我不得不关闭服务器。 寻找答案,我发现了这一点: SQL Server 2008连接问题:无法生成SSPI上下文 但这对我没有帮助,因为直到昨天他们都工作正常。我什么都不想改变。但是如果有必要,我会改变它。 Obs:我现在无法重新启动服务器。 编辑:自从我回答以来,我们没有任何错误。

2
如何在Sql Server 2008中调度作业少于10秒?
我想每3秒运行一次作业,但是在SQL Server 2008中,我们不能将间隔定义为少于10秒。 该作业用于将访问者信息以及细分信息插入/更新到Google搜索所跟踪的数据库中。 2到3秒钟内最多插入约100行。该作业将插入并更新数据库中的表。有什么方法可以使用sp作业计划配置进行计划吗?

1
填充日期维度表的最佳方法
我正在寻找在SQL Server 2008数据库中填充日期维度表的方法。表中的字段如下: [DateId] INT IDENTITY(1,1) PRIMARY KEY [DateTime] DATETIME [Date] DATE [DayOfWeek_Number] TINYINT [DayOfWeek_Name] VARCHAR(9) [DayOfWeek_ShortName] VARCHAR(3) [Week_Number] TINYINT [Fiscal_DayOfMonth] TINYINT [Fiscal_Month_Number] TINYINT [Fiscal_Month_Name] VARCHAR(12) [Fiscal_Month_ShortName] VARCHAR(3) [Fiscal_Quarter] TINYINT [Fiscal_Year] INT [Calendar_DayOfMonth] TINYINT [Calendar_Month Number] TINYINT [Calendar_Month_Name] VARCHAR(9) [Calendar_Month_ShortName] VARCHAR(3) [Calendar_Quarter] TINYINT [Calendar_Year] INT [IsLeapYear] BIT [IsWeekDay] BIT [IsWeekend] …

1
与单独的SELECT相比,在OR条件下索引查找要慢得多
根据这些问题和给出的答案: SQL 2008 Server-性能损失可能与非常大的表有关 具有历史数据的大表分配了过多的SQL Server 2008 Std。内存-其他数据库的性能损失 我在数据库SupervisionP中有一个表,定义如下: CREATE TABLE [dbo].[PenData]( [IDUkazatel] [smallint] NOT NULL, [Cas] [datetime2](0) NOT NULL, [Hodnota] [real] NULL, [HodnotaMax] [real] NULL, [HodnotaMin] [real] NULL, CONSTRAINT [PK_Data] PRIMARY KEY CLUSTERED ( [IDUkazatel] ASC, [Cas] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS …

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.