标签: sql-server-2008

我应该在添加主键之前还是之后添加页面级压缩?

情况

  • Sql Server 2008 Enterprise 上的数据仓库
  • 36+ 万行堆(别问),60+ 列
  • 每月增加 750k
  • 没有定义主键(我现在已经确定了一个)
  • 无压缩

我在想做什么(按此顺序)

  • 添加页面级压缩
  • 添加PK
  • 添加多个非聚集索引
  • 尽快执行此操作


我现在倾向于什么

-- Add page level compression
alter table     dbo.TableName
rebuild with    (data_compression = page)
; 
go

-- Add primary key
alter table             dbo.TableName
add constraint          PK_TableName
primary key clustered   (<Columns>)
;
go

-- Add NC_IXs here
...
...
Run Code Online (Sandbox Code Playgroud)

我看过here(PK创建文档)here(ALTER TABLE文档),但看不到任何关于是否有任何索引继承表压缩设置的明确信息。 这个特定问题的答案是“不,压缩不是继承的”,在 dba.stackexchange 上找到

sql-server-2008 sql-server

14
推荐指数
1
解决办法
2843
查看次数

我可以创建用户定义的表类型并在同一个事务中使用它吗?

当我执行以下命令时(在管理工作室中,GO 会将命令分成批处理)

use tempdb

begin tran
go

CREATE TYPE dbo.IntIntSet AS TABLE(
    Value0 Int NOT NULL,
    Value1 Int NOT NULL
)
go

declare @myPK dbo.IntIntSet;
go

rollback
Run Code Online (Sandbox Code Playgroud)

我收到一条死锁错误消息。我的过程已经陷入僵局。我在 2008、2008R2 和 2012 中看到过这种行为。

有没有办法在它创建的同一个事务中使用我新创建的类型?

sql-server-2008 sql-server deadlock sql-server-2012

14
推荐指数
1
解决办法
1万
查看次数

SQL Server 每天重新创建计划

我们的生产环境有这个问题。

Microsoft SQL Server 2008 R2 (SP1) - 10.50.2500.0 (X64) - Windows NT 6.1(内部版本 7601:Service Pack 1)上的企业版(64 位)。

SQL Server 正在删除所有(几乎 100%)旧的执行计划,并在每天夜间(从晚上 11:00 到早上 8:00)重新创建它们。当“自动更新统计信息”处于禁用状态时,甚至会发生这种情况。在过去的 2-3 周内,我们已经开启了“自动更新统计信息”。但它仍在发生。

我们真的不知道是什么触发了这种重新生成计划,但我们确信我们不会手动进行。

唯一真正与计划重新生成时间一致的是我们的数据库维护工作:每日索引重组(碎片为 5-30% 时),以及每日索引重建(碎片超过 30% 时) ) 工作。通常这个日常维护工作只做重组(因为每天的索引碎片永远不会超过 30%)。

影响:

这些新创建的计划使一些 UDF 调用/查询调用(从 UI/网页调用)花费更长的时间(分钟而不是不到 1 秒),因此会话只会堆积起来,使 CPU 接近 90% .

当那些卡住的会话被强行删除(在 DB 端)时,问题就会消失,并且 1)当所有相应的执行计划被手动清除(对于查询)或 2)当 UDF 被更改(对于函数)时。从那一刻起,SQL 服务器创建的任何新计划都会在一天中完美运行,直到第二天早上最终出现相同的问题。此外,这种行为并不是 100% 一致的,我们并不是每天早上都能看到它。但是有一段时间我们已经连续 4-5 天看到它了。

问题发生在工作日的早晨,这似乎是更频繁地访问 UI/网页的时候。

有没有人知道是什么导致了这个问题以及如何解决这个问题?任何帮助将非常感激。

sql-server-2008 sql-server statistics execution-plan

14
推荐指数
1
解决办法
382
查看次数

如何在SQL中获取使用用户名执行的查询历史记录

我可以使用以下方法执行查询:

SELECT deqs.last_execution_time AS [Time]
    ,dest.TEXT AS [Query]
FROM sys.dm_exec_query_stats AS deqs
CROSS APPLY sys.dm_exec_sql_text(deqs.sql_handle) AS dest
ORDER BY deqs.last_execution_time DESC
Run Code Online (Sandbox Code Playgroud)

但我也在寻找username执行这些查询的列。

sql-server-2008 sql-server audit

14
推荐指数
1
解决办法
8万
查看次数

寻找 FILESTREAM 内幕信息

在 Microsoft SQL Server 2012 上激活 FILESTREAM 功能后,SQL Server 将在系统上创建“隐藏”共享。份额定义如下:

Sharename          FILESTREAM_SHARE
Path               \\?\GLOBALROOT\Device\RsFx0320\<localmachine>\FILESTREAM_SHARE
Remark             SQL Server FILESTREAM share
Maximum users      unlimited
Users Caching      Manual caching of documents 
Permissions        NT-AUTHORITY\Authenticated Users, FULL
Run Code Online (Sandbox Code Playgroud)

该名称是您在SQL Server 配置管理器中最初配置 FILESTREAM 时提供的共享名称。但它是为了什么?

迄今为止

我通读了所有可用的 FILESTREAM 文档,从以下位置开始:

sql-server-2008 sql-server database-internals sql-server-2012 filestream

14
推荐指数
1
解决办法
1618
查看次数

SQL Server 能否在系统生成的约束名称中创建冲突?

我有一个应用程序,它在 SQL Server 2008 数据库(非集群)中创建了数百万个表。我想升级到 SQL Server 2014(集群),但在负载下时遇到错误消息:

“数据库中已经有一个名为'PK__tablenameprefix__179E2ED8F259C33B'的对象”

这是系统生成的约束名称。它看起来像一个随机生成的 64 位数字。由于大量表,我是否可能看到冲突?假设我有 1 亿张表,我计算出在添加下一张表时发生碰撞的可能性不到 1 万亿分之一,但这是假设均匀分布的。SQL Server 是否有可能在 2008 和 2014 版本之间更改其名称生成算法以增加冲突的几率?

另一个显着差异是我 2014 年的实例是一个集群对,但我正在努力形成一个假设,为什么会产生上述错误。

PS 是的,我知道创建数百万个表是疯狂的。这是我无法控制的黑盒 3rd 方代码。尽管疯狂,但它在 2008 版中有效,现在在 2014 版中无效。

编辑:仔细检查,生成的后缀似乎总是以 179E2ED8 开头 - 这意味着随机部分实际上只是一个 32 位数字,每次添加新表时,冲突的几率仅为 50 分之一,这与我看到的错误率更接近!

sql-server-2008 sql-server constraint sql-server-2014

14
推荐指数
2
解决办法
977
查看次数

如何确定 SQL Server 2008 中的 SQL Server 数据库中是否存在表?

如何确定 SQL Server 2008 中的 SQL Server 数据库中是否存在表?

sql-server-2008

13
推荐指数
2
解决办法
7万
查看次数

在 SQL Server 2008 中读取 XML 文件

如何读取 XML 文件并将 XML 中的数据存储到 SQL Server 2008 中的表中?

sql-server-2008 xml sql-server

13
推荐指数
2
解决办法
4万
查看次数

创建集中式 DBA 数据库

我们有 200 多台服务器,我正在考虑创建一个集中的 DBA 数据库,在其中记录备份、错误、空间作业并生成关于 SSRS 的报告。我不知道从哪里开始,我非常感谢您的帮助。非常感谢。

sql-server-2008

13
推荐指数
2
解决办法
1788
查看次数

快照复制保留

我在我的 SQL Server 2008 生产服务器上设置了快照复制,我刚刚注意到快照文件夹中的快照可以追溯到一年前。如何更改这些快照的保留时间?具体来说,我希望将快照保留 5 天。

这是我正在查看的文件夹的屏幕截图: 复制文件夹

replication sql-server-2008 sql-server

13
推荐指数
1
解决办法
4578
查看次数