-- 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 上找到
当我执行以下命令时(在管理工作室中,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 中看到过这种行为。
有没有办法在它创建的同一个事务中使用我新创建的类型?
我们的生产环境有这个问题。
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/网页的时候。
有没有人知道是什么导致了这个问题以及如何解决这个问题?任何帮助将非常感激。
我可以使用以下方法执行查询:
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执行这些查询的列。
在 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
我有一个应用程序,它在 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 数据库中是否存在表?
如何读取 XML 文件并将 XML 中的数据存储到 SQL Server 2008 中的表中?
我们有 200 多台服务器,我正在考虑创建一个集中的 DBA 数据库,在其中记录备份、错误、空间作业并生成关于 SSRS 的报告。我不知道从哪里开始,我非常感谢您的帮助。非常感谢。
我在我的 SQL Server 2008 生产服务器上设置了快照复制,我刚刚注意到快照文件夹中的快照可以追溯到一年前。如何更改这些快照的保留时间?具体来说,我希望将快照保留 5 天。
这是我正在查看的文件夹的屏幕截图:

sql-server-2008 ×10
sql-server ×8
audit ×1
constraint ×1
deadlock ×1
filestream ×1
replication ×1
statistics ×1
xml ×1