我正在研究并行设置的可能边缘情况。
我长期以来一直相信maxdop 1是 Microsoft Dynamics CRM 数据库的可行选项。由于数据库的本质是严格的 OLTP,并且并行性对 CRM 实例几乎没有好处,因此我始终将 CRM 数据库设置为maxdop 1.
但是,我现在有一个数据库实例,它具有:
我询问了我们的业务合作伙伴,他们对性能重要性的看法如下:
因此,我倾向于牺牲 OLAP 数据库的并行性,并设置maxdop 1为最大限度地使 CRM 受益。
然而,可能存在一些中间立场。
如果我将 设置cost threshold for parallelism为一个数字,排除 CRM 抛出的所有内容,但根据我的查询计划可能会抓取一些 OLAP 事务,对 CRM 会有任何不利影响吗?
如果有的话,保持阈值如此之高(几乎从未达到)的影响是什么,与设置相比maxdop 1,我是否会在计算查询计划时让 SQL Server 考虑阈值而产生一些隐藏成本?
在审查我们的一些代码时,一位同事认为,TRUNCATE TABLE当TRUNCATE.
谷歌搜索这个,我确实找不到TABLE需要该部分的具体原因。
我错过了什么?TABLEin 有TRUNCATE TABLE什么历史原因吗?
我希望更新READ_ONLY数据库上的几个用户。
由于数据库在全球范围内 24/7 全天候使用,并且维护窗口刚刚过去,我想在活动量低的时刻执行此操作(以便能够遵守截止日期)。
我目前正在考虑使用:
USE MASTER
GO
ALTER DATABASE SQL SET READ_WRITE
GO
USE SQL
GO
EXEC sp_addrolemember N'db_datareader', N'USER'
GO
USE MASTER
GO
ALTER DATABASE SQL SET READ_ONLY
GO
Run Code Online (Sandbox Code Playgroud)
但是我想:
由于我无法将这些命令放入事务中,而且我在 DEV 或 STG 环境中没有方便的应用程序服务器来预先测试更改,是否有任何有关更改read_only单个操作状态的文档?(我确实测试了 T-SQL 语句,并且它们有效)
另外,由于这需要对数据库进行排他锁,我什至有可能通过我的语句吗?
我倾向于只是提出这将不得不等到下一个维护窗口期间。但我希望这里有人能证明我错了。
我最近从 SQL Server 2005 升级到 2012。但是在验证过程中,发现了一个错误。
某个触发器的编码如下:
CREATE TRIGGER [dbo].[trigger] on [dbo].[foo]
FOR UPDATE, UPDATE
AS
UPDATE foobar
SET datetime = GetDate()
FROM bar
WHERE foobar.id = bar.id
GO
Run Code Online (Sandbox Code Playgroud)
我可以在 SQL Server 2005 上安全地执行这个(奇怪的)。
但是,在 SQL Server 2012 上,它会引发(我所期望的)语法错误。
语法错误:触发器声明中操作“UPDATE”的重复规范。
为什么这不会在 SQL Server 2005 上引发语法错误?我在这方面的 google-fu 失败了。
为什么这似乎适用于 SQL Server 2005?
sql-server ×2
syntax ×2
locking ×1
parallelism ×1
performance ×1
t-sql ×1
trigger ×1
truncate ×1