我有一个数据库,它有多个表,没有任何聚集索引。我发现的所有内容都很小(< 500 行)。具体来说,PRIMARY KEY NONCLUSTERED根本没有其他索引。
在非常高的层次上,我理解没有聚集索引的性能限制。也许更多,所以我明白这不是最佳实践,但在我积极开始将非聚集主键转换为聚集主键之前,在转换这些索引时有什么注意事项吗?
我能想到的唯一一个是更新大表上的索引所需的时间,但同样这些时间相对较小。也许文件和分区,但我只有一个分区。
作为参考,这是一个运行在 SQL Server 2016 上的兼容 2008 的 SQL Server 数据库。这是在我们的主要 OLTP 系统中(这些表不涉及仓储和 ETL)。
是什么导致 Microsoft SQL Server 自动删除手动创建的索引?我创建的每个索引都会在几个小时内删除。
这是我用来创建索引的代码。受影响的视图运行得更快。索引消失/在几个小时内被删除。受影响的视图运行缓慢或失败。
CREATE NONCLUSTERED INDEX IX_Tablename_fieldname
ON dbo.Tablename (fieldname)
WITH (STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON,
ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
Run Code Online (Sandbox Code Playgroud) 我已经创建了一个到 SQL Server 2005 的 ODBC 连接。
当我从 MS Access 链接到表时,有些表只有“已删除”的数据。
这意味着显示了行和列,但所有数据似乎都被“删除”(图像中的“Geloscht”)
我发现同一个数据库的一些表可以正常工作,这很了不起。

(我是根据评论者的建议从 SO 交叉发布的)
我们的 DBA 创建了一种模式,其中我们的数据库层通过视图和 CRUD 存储过程暴露给 EF。CRUD 与视图背道而驰。所有视图都有 NOLOCK 提示。据我所知,NOLOCK 是脏读,这让我很紧张。我们的数据库容量不大,但似乎一揽子 NOLOCK 在保持数据完整性的同时不是很可扩展。我知道解耦是个好主意,但问题是我们没有。我们外部暴露的对象看起来就像我们的视图一样,它们与我们的表 1 到 1 映射。
“如果我们想改变底层数据模型,我们可以。” ......但我们没有。从 VS/EF 工具的角度来看,我不会触及这一切是什么 PITA。
这种情况下用NOLOCK是不是不好?由于我们的数据库看起来与我们的类库完全一样,我认为摆脱整个视图/存储过程层并直接从 EF 访问 DB 是有意义的,是吗?
首先让我声明我不是 DBA,我没有 DBA 的访问权限,我只是一个必须让 CMS 工作的程序员。我通常很擅长让随机服务器工作,但这让我很头疼。
我安装了 SQL Server 2008 的踪迹,以及从备份导入的数据库。CMS 启动,连接到数据库,但告诉我
[SqlException (0x80131904): 用户 'kentico' 登录失败。]
检查日志显示我
错误:18456,严重性:14,状态:12。
我用谷歌搜索,每个答案都将状态 11 和 12 放在一起,我想我已经完成了帖子中提到的内容。但我真的只是在黑暗中跌跌撞撞。我什至不知道我可以提供哪些其他信息来帮助人们帮助我!
我在\security\logins文件夹中创建了一个用户,这个登录被映射到\databases\<db_name>\security\文件夹中的同名用户。我还要做什么?!
我应该说,将连接字符串更改为 sa 帐户让我进入了 cms,但随后我只允许在 sa 帐户上建立一个连接,因此当连接被拒绝时,CMS 会随机吐出虚拟对象。
任何帮助将不胜感激,请记住,这是我第一次查看 SQL Server,因此假设的知识不存在:(
我有一个生产数据库,它已经被关闭了几个月。我一直在对测试/开发服务器上的重复副本进行修改。我已经向几个表添加了一些额外的字段(允许为空),并且我已经向新表和现有表添加了一些新表和索引。
我的问题是:我已准备好使用我的测试/开发数据库并将其投入生产。问题是我需要将所有数据从我的生产数据库迁移到我的测试/开发数据库。我的第一个想法是使用 SSMS 将数据从生产“导入”到测试/开发,我遇到的问题是即使使用“启用身份插入”,我仍然会遇到所有类型的外键约束错误。这有点像两部分
我很乐意只将我的测试/开发模式迁移到我的生产服务器,但我还没有找到任何方法来做到这一点,而无需手动逐表、逐索引、逐视图、逐存储过程的存储过程。 . 等我已经看到一些声称能够做到这一点的工具,但我正在寻找一个免费/开源的解决方案并且没有找到任何东西。
注意:数据库很小 < 10gb,测试/开发数据库被完全截断,每个表中的记录为零。
多亏了一些很棒的帖子,我已经成功地在客户的 SQL Server 实例上启动了一些服务器端跟踪,但由于这确实是我在“现实生活”情况下的第一次,我想知道一些事情。
1) 我在创建跟踪的脚本中定义了跟踪文件的“基本”名称。我每天早上 6 点开始跟踪并在晚上 7 点再次关闭它。我真正想做的是将跟踪文件的基本名称设置为包含日期,例如,我希望将其设为
(some directory)\MyTrace-2012-Apr-19
Run Code Online (Sandbox Code Playgroud)
等等 - 这样每天的跟踪文件将很容易识别。有没有办法实现这一目标?我是否必须每天实际创建和删除跟踪才能得到这个??
2) 如果我每天打开和关闭跟踪,我昨天 ( MyTrace.trc) 的跟踪文件今天会被重用,直到它定义的最大大小吗?或者 SQL Server 会在每天启动时创建一个新的跟踪文件 ( MyTrace_1.trc, MyTrace_2.trc) 吗?
3)此外,即使在晚上 7 点之后,我也无法尝试获取该跟踪文件 - 似乎它仍然被某个进程锁定,我不能将它复制到其他地方......我假设一旦跟踪停止,文件将“免费”可用 - 我错了吗?
我们在服务器 A 上有一个应用程序数据库,它使用推送事务复制复制到服务器 B。报告是在服务器 B 上的复制副本上完成的。
我们在复制过程中遇到问题,它获得了一个共享的意向排他(SIX) 锁,死锁的SELECT语句,获得了一个意向共享(IS) 锁。该SELECT语句被选为死锁牺牲品,查询终止,报表开发人员不高兴。
我应该在哪里解决这个问题?我们应该NOLOCK在SELECT语句中添加提示吗?更改一些复制设置?这里是否存在更大的问题,例如糟糕的数据库设计?
我想删除数据库中所有表的所有约束,因为我需要更改许多表的关系。
有没有办法用 T-SQL 做到这一点?我找不到任何解决方案和代码,例如:
ALTER TABLE testDB.dbo.testTable1
DROP ALL CONSTRAINT
GO
Run Code Online (Sandbox Code Playgroud)
不起作用。
在 SQL Server 2008 R2 中,我在具有 1 亿多行的多个表上有一个非聚集覆盖索引。该表有几千个“插入点”,所有新插入都在其中发生。这意味着无论填充因子如何,我很快就会在每个插入点处出现页面拆分和碎片,并且表格中的其他任何地方都不会出现碎片或拆分。不幸的是,查询总是包含新行,因此索引的碎片区域。
这是有关该问题的更多信息。索引都看起来像这种模式(为了清楚起见,下面进行了简化):
CREATE TABLE Foo (
id int identity(1,1) PRIMARY KEY CLUSTERED,
foreign_key int,
log_time datetime,
...)
CREATE NONCLUSTERED INDEX on Foo (foreign_key, log_time) INCLUDE (...)
Run Code Online (Sandbox Code Playgroud)
此表上的查询始终采用以下形式:
WHERE log_time > getdate()-70 AND foreign_key IN (select ...)
Run Code Online (Sandbox Code Playgroud)
其他事实:
IN过滤器通常包括10%-50%foreign_key的值的行和日期过滤器包括20%-40的行的%。平均值约为所选行总数的 15%。sql-server ×8
alter-table ×1
constraint ×1
index-tuning ×1
migration ×1
ms-access ×1
odbc ×1
ssms ×1
t-sql ×1
trace ×1