当我执行以下命令时(在管理工作室中,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 中看到过这种行为。
有没有办法在它创建的同一个事务中使用我新创建的类型?
我有一个将 BlockOnPossibleDataLoss 设置为 false 的 dacpac,但是当我使用 sqlpackage.exe 运行它时部署被阻止,告诉我“列 [a] 被删除,可能会发生数据丢失。”
但是,当我使用完全相同的部署配置文件并从 Visual Studio 2012 发布时,它会通过。
sql-server sql-server-2012 ssdt visual-studio-2012 data-tier-application
我正在比较 SQL Server 2012 中的两个查询。目标是在选择最佳查询时使用查询优化器提供的所有相关信息。两个查询产生相同的结果;所有客户的最大 orderid。
在使用 FREEPROCCACHE 和 DROPCLEANBUFFERS 执行每个查询之前清除缓冲池
使用下面提供的信息,哪个查询是更好的选择?
-- Query 1 - return the maximum order id for a customer
SELECT orderid, custid
FROM Sales.Orders AS O1
WHERE orderid = (SELECT MAX(O2.orderid)
FROM Sales.Orders AS O2
WHERE O2.custid = O1.custid);
-- Query 2 - return the maximum order id for a customer
SELECT MAX(orderid), custid
FROM Sales.Orders AS O1
group by custid
order by custid
Run Code Online (Sandbox Code Playgroud)
统计时间
查询 1 STATISTICS TIME:CPU 时间 = 0 毫秒,经过时间 …
我们正在尝试使用 Bitlocker 来保护 SQL Server 2012 数据库。我们没有任何问题让 bitlocker 工作......我们遇到的问题是一旦驱动器被锁定,SQL Server 就无法再读取数据。
显然,我们很想使用 TDE,但由于它仅限于企业版,因此不能使用。我们在服务器上激活了 TPM。这是在 Windows 域中,我们使用 Windows 身份验证......但是一旦驱动器被加密,我们就无法使用任何东西访问数据库。
我在这里缺少什么?
系统视图sys.partitions有一列“行”,它是给定分区中的总行数。对于未分区的表(或只有一个分区,取决于您如何看待它),此列给出了表中的行数。
我很好奇这个列有多准确,我是否可以用它代替SELECT COUNT(1) FROM TableName. 我做了一些实验,创建一个表并添加几千行,删除几百行,再添加几千行等等,而且计数一直都在。但是,我有一张包含大约 7 亿行和几个索引的表。sys.partitions聚集索引的行再次失效,但是其他索引显示出一些细微的变化 (+-20k)。
有谁知道这一行是如何计算的,以及它是否像看起来一样准确?
sql-server sql-server-2008-r2 partitioning count sql-server-2012
在SQL Server 2012中,服务帐户创建为虚拟账户(VAS),如所描述这里,而不是托管服务帐户(MSAS)。
根据描述,我可以看到这些重要的区别:
还有其他区别吗?如果不使用 Kerberos,为什么 DBA 会更喜欢 MSA?
更新:另一位用户在有关 VA 的 MS 文档中注意到了一个可能的矛盾:
虚拟账户是自动管理的,虚拟账户可以在域环境中访问网络。
相对
虚拟帐户无法在远程位置进行身份验证。所有虚拟账户都使用机器账户的权限。以 格式提供机器帐户
<domain_name>\<computer_name>$。
什么是“机器账号”?它如何/何时/为什么被“配置”?“在域环境中访问网络”和“在[域环境中]对远程位置进行身份验证”之间有什么区别?
该ISNUMERIC函数有一些意外行为。MSDN 文档说:
ISNUMERIC当输入表达式计算为有效的数字数据类型时返回 1;否则返回 0。有效的数字数据类型包括:int、bigint、smallint、tinyint、decimal、numeric、money、smallmoney、float、real。
它还有一个脚注:
ISNUMERIC对于某些非数字字符返回 1,例如加号 (+)、减号 (-) 和有效的货币符号,例如美元符号 ($)。有关货币符号的完整列表,请参阅money 和 smallmoney (Transact-SQL)。
好的,因此+、-和 列出的货币符号应被视为数字。到现在为止还挺好。
现在是奇怪的部分。首先,链接文章中的一些货币符号不是数字,包括:
???这很奇怪,我似乎无法找出原因?这个版本或环境依赖吗?
然而,事情变得更奇怪了。这里还有一些我无法解释的:
/不是数字,而是\(啊?!)REPLICATE(N'9', 308)是数字,但REPLICATE(N'9', 309)不是第一个也是最基本的问题是:如何解释上述情况?更重要的是:背后的逻辑是什么ISNUMERIC,所以我可以自己解释/预测所有案例?
这是重现事物的好方法:
DECLARE @tbl TABLE(txt NVARCHAR(1000));
INSERT INTO @tbl (txt)
VALUES (N''), (N' '), (N'€'), (N'$'), (N'$$'),
(NCHAR(8356)), (NCHAR(8352)), …Run Code Online (Sandbox Code Playgroud) 对于 MySQL,我知道数据库是在 SQL 语句中逐表备份的,这会导致锁定,如果在备份时更新列,则最终可能会出现完整性问题。
据我了解,这不适用于 Microsoft SQL Server,但 SQL Server 是如何处理的?是否有一些内部冻结来保持数据库一致?
我还听说备份是单线程的,这意味着它只使用一个核心,假设您备份到单个文件。还假设您有一台多核机器,例如 16 核,或者至少比 1 多得多。
根据我的个人经验,我在备份时从未遇到过问题,既没有锁定也没有开销问题,但我的经验有限。这就是为什么我总是建议在服务器属性中打开备份压缩。
那么当备份作业正在运行时会发生什么?不同版本是否也有显着差异?例如 2008、2012 和 2014(不是许可证)。
我有这个数据库表,它应该使全文索引保持最新。但是我根本没有看到它发生(日志中没有错误,因为我看到的最后一个日志是我手动触发它时)。
这是我所看到的......
但在桌子上...
这可能是它不会自动发生的原因吗?
所以我有一个简单的批量插入过程来从我们的临时表中获取数据并将其移动到我们的数据集市中。
该过程是一个简单的数据流任务,默认设置为“每批行数”,选项为“tablock”和“无检查约束”。
桌子相当大。587,162,986 数据大小为 201GB,索引空间为 49GB。表的聚集索引是。
CREATE CLUSTERED INDEX ImageData ON dbo.ImageData
(
DOC_ID ASC,
ACCT_NUM ASC,
MasterID ASC
)
Run Code Online (Sandbox Code Playgroud)
主键是:
ALTER TABLE dbo.ImageData
ADD CONSTRAINT ImageData
PRIMARY KEY NONCLUSTERED
(
ImageID ASC,
DT_CRTE_DOC ASC
)
Run Code Online (Sandbox Code Playgroud)
现在我们遇到了一个问题,BULK INSERT通过 SSIS 运行速度非常慢。1 小时插入一百万行。填充表的查询已经排序,并且要填充的查询运行时间不到一分钟。
当进程运行时,我可以看到等待 BULK insert 的查询需要 5 到 20 秒,并显示等待类型为PAGEIOLATCH_EX. 该过程一次只能处理INSERT大约一千行。
昨天在我的 UAT 环境中测试这个过程时,我遇到了同样的问题。我运行了几次这个过程并试图确定这个缓慢插入的根本原因是什么。然后突然间它在不到 5 分钟的时间内开始运行。所以我又跑了几次,结果都是一样的。此外,等待 5 秒或更长时间的批量插入的数量从数百个下降到大约 4 个。
现在这令人困惑,因为我们的活动并没有大幅下降。
持续时间内的 CPU 低。
当它变慢时,磁盘上的等待似乎更少。
在进程运行不到 5 分钟的时间范围内,磁盘延迟实际上会增加。
在此过程运行不佳期间,IO 低得多。
我已经检查过并且没有文件增长,因为文件只有 70% 已满。日志文件还有 50% 的时间要处理。数据库处于简单恢复模式。DB …
sql-server-2012 ×10
sql-server ×8
backup ×1
count ×1
deadlock ×1
index ×1
kerberos ×1
partitioning ×1
password ×1
performance ×1
ssdt ×1
ssis ×1
windows ×1