我们已经运行 SQL Server 2014 将近一年了,但 SQL Server 2012 SP3 继续出现在 Windows 更新列表中(作为可选安装)。从以前的版本安装服务包似乎很荒谬,所以我只是忽略了它。
但是,我们最近开始遇到断言失败(有关更多信息,请参见下文),我们正在尝试解决的一件事是确保服务器已完全修补。我们安装了 2014 年最新的累积更新,但它没有解决问题或使 SP3 项目从 Windows 更新中消失。SP3 仍然不在我的关注范围内,但后来我发现了一篇Microsoft 产品支持服务博客文章,其中说使用最佳实践安全分析器来尝试解决断言失败,当我这样做时,它提出了一个警告,我们没有应用那个SP3。
所以现在我正在考虑应用该安装,但我担心我会不小心降级我的服务器 - 不是我们会完全回到 2012 年,而是一些累积更新可能会被还原,或者其他一些奇怪的行为。
(这不是我们收到的确切断言失败,但它很接近。我找不到似乎描述我们遇到的实际问题的知识库文章 - 上一句中链接的知识库与TOP N我们的有关与使用 的过程有关OFFSET X ROWS FETCH NEXT Y ROWS ONLY。实际的断言失败是SQL Server Assertion: File: <op_ppqte.cpp>, line=12258)
sql-server installation sql-server-2012 service-pack sql-server-2014
从开发人员升级到标准版 2012 版本后,SQL Server 数据库处于可疑模式。在日志文件中有两个错误:933 和错误 905。当我们试图让数据库重新联机时发生了以下错误。
消息 5069,级别 16,状态 1,第 1 行 ALTER DATABASE 语句失败。消息 905,级别 21,状态 1,第 1 行数据库“VTSDB”无法在此版本的 SQL Server 中启动,因为它包含分区函数“FNprocessedrawdata”。只有企业版的 SQL Server 支持分区。消息 933,级别 21,状态 1,第 1 行数据库“VTSDB”无法启动,因为某些数据库功能在当前版本的 SQL Server 中不可用。
我需要计算DATEDIFF每个日期的第一条记录与每个日期EventCode = 1的最后一条记录之间的秒数EventCode = 2。
我在这里发布了 2 天的示例数据集:http : //data.stackexchange.com/dba/query/515591/calculate-the-difference-between-first-event-and-last-event-for-each-日期
所以这就是我如何获得每个日期的第一条记录:
Select
LogDate,
StartOfDay = MIN(LogDateTime),
EventCode
FROM (
Select
LogId,
LogDateTime,
LogDate = FORMAT(LogDateTime, 'dd-MMM-yyyy'),
DriverId,
EventCode
FROM
#MyLogs
WHERE EventCode = 1
) A
Group By
LogDate, EventCode
Run Code Online (Sandbox Code Playgroud)
这就是我获取每个日期的最后记录的方式 EventCode = 2
Select
LogDate,
EndOfDay = MAX(LogDateTime),
EventCode
FROM (
Select
LogId,
LogDateTime,
LogDate = FORMAT(LogDateTime, 'dd-MMM-yyyy'),
DriverId,
EventCode
FROM
#MyLogs
WHERE EventCode = 2
) A
Group By
LogDate, EventCode …Run Code Online (Sandbox Code Playgroud) 我需要在两个非常大(几乎 750 个表)的数据库中重建索引,但希望在发生这种情况时阻止用户访问数据库。是否有一种状态可以让我将数据库置于阻止用户访问它但仍允许我重建索引的状态?作为参考,我计划使用http://instadba.com/quick-script-to-defragment-your-sql-server-indexes/上提供的脚本进行重建。
我们有一个应用程序,它使用 MSSync 将数据从服务器下载到客户端的 SQL Server Express 2005。客户端具有双核和超线程,因此总共有 4 个核。
我对 SQL Server Express 的局限性进行了大量研究,我认为它归结为 1 个物理套接字,但在该套接字中最多使用 4 个内核。但是,这提出了一些与我在实践中所感知到的形成对比的问题。
我们的同步过程将 1 个内核最大化,淹没了同步过程,导致性能比具有更高 GHz 且未最大化 SQL Server Express 2005 使用的单个内核的设备慢 10-20 倍。
但是:如果允许 SQL Server 在 1 个套接字中使用 4 个内核,为什么它只使用 1 个用于我们的同步过程?这是因为 1 个连接有一个专用核心吗?还是我没有正确理解限制规格?将 SQL Server Express 升级到现代版本是否有助于让它使用更多内核?
我做了更多的研究。我使用了 SQL Server Express 2012 甚至 SQL Server Developer 2012 并且 ALL 最多只有 1 个核心。因此,显然,这与 Express 限制无关。
这可能是一个技术限制,您在单个连接/事务中的查询仅停留在单个核心上。很可能,这是保证事务一致性的逻辑要求。
我在 SQL Server 2012 中看到的是,负载会时不时地交换到另一个核心,但它永远不会同时使用超过 1 个核心。甚至没有开发版。
如果有人能证实这些假设,那将是受欢迎的。
sql-server-2005 sql-server sql-server-2012 sql-server-express limits
我有一个使用 SQL Server 2012 Enterprise Edition 作为后端的 Web 系统。
我们的一个查询特别繁重,大约需要 60 秒。我对这个查询进行了大量分析,知道时间花在了 INSERT INTO 表变量 SELECT FROM 表中。这意味着表上应该有一个共享锁,但并行进程应该能够并行运行此查询。
一个 Web 端点在不同的进程中并行调用其中 3 个过程。由于我们有 4 个内核,我希望 SQL 服务器应该在一个内核上运行一个进程,因此 3 个进程同时运行,这样我们的查询时间约为 60 秒。
然而,大多数情况下,它会在运行 2 个进程之间切换,然后每 20-30 秒运行 1 个进程。我可以看到 CPU 使用率在 25% 到 50% 之间跳跃(因为是 4 核机器)。
未运行的进程处于 RUNNABLE 状态,因此它们似乎只是在等待 CPU 时间,没有导致问题的表锁。
有时它实际上一次只运行 1 个,有时同时运行 3 个,因此某些事情会导致一些决策。
我已经检查过许可看到所有 4 个核心(确实如此)并且处理器关联设置为全部使用。由于这不在查询中,我不希望 MAX_DOP 对此产生影响,但我已在 0 和 2 处尝试过。
知道是什么影响了 SQL 服务器的决策制定吗?如果我们可以改变这种行为?
当我有一个带有逻辑排序的聚集索引时ASC,有没有办法在输出的数据页中找到逻辑排序DBCC PAGE?
如何对sp_spaceused所有数据库中的所有表执行?
即如何在sp_spaceused里面执行sp_msforeachdb。
例如:
sp_msforeachdb 'sp_msforeachtable'sp_spaceused"?"''
Run Code Online (Sandbox Code Playgroud) 因此,如果我有一个带有值的表:
ID
------
a1b2c3
ac2b31
db13a2
Run Code Online (Sandbox Code Playgroud)
我希望结果看起来像这样
Id
------
abc123
acb231
dba132
Run Code Online (Sandbox Code Playgroud)
换句话说,重新排列字符串,使所有字符首先出现,然后是所有数字。顺序不重要。
(我所说的无循环是指,没有传统的循环。我正在查看一些 CTE 示例,但无法在此处进行调整。)
我正在尝试提取有关重复调度的信息,但似乎无法提出一个简单的解决方案来提取我的报告数据。
我有下表:
tblMaster15
ID | Equipment
----------------
1 | Sink
----------------
2 | Grill
Run Code Online (Sandbox Code Playgroud)
另一个包含位置信息的表,我必须使用 ID 加入:
tblMaster15_ABData
ID | Unit | Region
--------------------
1 | 600 | 6000
--------------------
2 | 601 | 7000
Run Code Online (Sandbox Code Playgroud)
我正在尝试生成 ID、单位和设备的列表,但前提是单位和设备在给定时间段内相同超过 3 次。
我已经尝试了以下但它似乎给了我一切,而不仅仅是计数 > 3 的地方。
select m.mrid, a.unit, a.Region, m.Equipment
from MASTER36 m
join MASTER36_ABDATA a
on m.mrid = a.mrid
, (select a.unit, m.Equipment
from MASTER36 m
join MASTER36_ABDATA a
on m.mrid = a.mrid
group by a.unit, m.Equipment
having count(*) > 3 …Run Code Online (Sandbox Code Playgroud)