在重新启动承载 MS SQL Server 实例的服务器时,是否需要采取任何特殊步骤来防止数据损坏?
比如最近遇到了手动停止SQL服务的建议。我的理解是,这是由 Windowsshutdown
进程处理的。
我敢肯定,个人可能会推荐无数个步骤,就像我刚刚提到的那样,但我想避免重复过时或迷信的做法。Microsoft 或广泛的行业标准是否有任何建议?
这个问题与重启机器的短期程序有关。还有另一个问题是关于在永久关闭机器之前确保机器未被使用的长期程序。
我了解SQL Server 架构的功能,但最佳实践是什么?当然,它们提供了另一层安全性,并在数据库内提供数据库对象的逻辑分组,但那里的典型情况是什么?根据我的经验,我经常看不到许多定制的模式被利用。这是典型的吗?是不是应该使用自定义模式的不太频繁的场景?
从 Microsoft SQL Server 检索的数据是否被压缩?如果这是由连接字符串控制的,是否有任何简单的方法可以判断是否有任何特定应用程序正在使用它?
我正在检查分析工具,数据量可能需要几分钟才能通过我们的网络传输。我想知道如果我们从同一远程服务器上的压缩数据存储中提取数据,我是否应该期待性能提升。
只要我们讨论这个话题,我就很好奇:数据是用二进制还是 ASCII 传输?例如,如果12345
从INT
列中查询值,是否将其作为五个字节0x31、0x32、0x33、0x34、0x35传输;该值所需的两个字节;或列所需的四个字节?
需要明确的是,我知道有一些关于压缩存储数据和备份数据的选项。我问的是数据是如何传输的。
我有一个相当复杂的查询,它自己只运行几秒钟,但是当包装在表值函数中时,它要慢得多;我实际上并没有让它完成,但它运行了长达十分钟而没有结束。唯一的变化是用日期参数替换两个日期变量(用日期文字初始化):
七秒内运行
DECLARE @StartDate DATE = '2011-05-21'
DECLARE @EndDate DATE = '2011-05-23'
DECLARE @Data TABLE (...)
INSERT INTO @Data(...) SELECT...
SELECT * FROM @Data
Run Code Online (Sandbox Code Playgroud)
运行至少十分钟
CREATE FUNCTION X (@StartDate DATE, @EndDate DATE)
RETURNS TABLE AS RETURN
SELECT ...
SELECT * FROM X ('2011-05-21', '2011-05-23')
Run Code Online (Sandbox Code Playgroud)
我之前曾将该函数编写为带有 RETURNS @Data TABLE (...) 子句的多语句 TVF,但是将其替换为内联结构并没有产生明显的变化。TVF 的长时间运行时间为实际SELECT * FROM X
时间;实际上创建 UDF 只需要几秒钟。
我可以发布有问题的查询,但它有点长(约 165 行),并且基于第一种方法的成功,我怀疑正在发生其他事情。浏览执行计划,它们似乎是相同的。
我试过将查询分解成更小的部分,没有改变。单独执行时,没有一个部分需要超过几秒钟,但 TVF 仍然挂起。
我看到一个非常相似的问题,/sf/ask/293335451/,但我不确定该解决方案是否适用。也许有人已经看到了这个问题并且知道一个更通用的解决方案?谢谢!
这是经过几分钟处理后的 dm_exec_requests:
session_id 59
request_id 0
start_time 40688.46517
status running
command UPDATE …
Run Code Online (Sandbox Code Playgroud) 我有一个包含 490 M 行和 55 GB 表空间的表,所以每行大约 167 个字节。该表包含三列: a VARCHAR(100)
、 aDATETIME2(0)
和 a SMALLINT
。VARCHAR
字段中文本的平均长度约为 21.5,因此原始数据每行应约为 32 个字节: 22+2 表示VARCHAR
, 6 表示DATETIME2
,2 表示 16 位整数。
请注意,上面的空间仅是数据,而不是索引。我正在使用属性下报告的值 | 存储 | 一般 | 数据空间。
当然肯定会有一些开销,但是每行 135 个字节似乎很多,尤其是对于大表。为什么会这样?有没有其他人见过类似的乘数?哪些因素会影响所需的额外空间量?
为了进行比较,我尝试创建一个包含两个INT
字段和 1 M 行的表。所需的数据空间为 16.4 MB:每行 17 个字节,而原始数据为 8 个字节。另一个测试表中的 anINT
和 aVARCHAR(100)
填充了与真实表相同的文本,每行使用 39 个字节(44 K 行),我预计 28 加上一点。
所以生产表有更多的开销。这是因为它更大吗?我希望索引大小大约为 N * log(N),但我不明白为什么实际数据所需的空间是非线性的。
在此先感谢您的指点!
编辑:
列出的所有字段都是NOT NULL
. …
我发现用于管理代理作业的内置 MS SQL Studio 工具有点令人沮丧。您发现哪些工具有用?
顺便说一句,我想在这样的工具中看到三件事:
编写一个小应用程序来处理这个问题可能很简单,但肯定有人已经这样做了,而且做得更好。
这显然是一个主观问题,所以如果某种 mod 徘徊过去,请随意将其设为 CW。
尝试使用 dtexec.exe 运行 SSIS 包时,我收到以下错误消息:
Could not load package "D:\Filename.dtsx" because of error 0xC00160AE.
Description: Connecting to the Integration Services service on the computer "" failed
with the following error: "Access is denied."
By default, only administrators have access to the Integration Services service. On
Windows Vista and later, the process must be running with administrative privileges in
order to connect to the Integration Services service. See the help topic for information
on how to configure access to the service. …
Run Code Online (Sandbox Code Playgroud) 我在一家大企业中支持一个应用程序,我的职责之一是清理数据。我需要每小时执行一个查询,我想自动化它。由于组织政策,我无法创建 SQL Server 代理作业或修改架构,我只能操作数据。
无尽的
WHILE(1=1)
BEGIN
WAITFOR DELAY '01:00';
--do work
END
Run Code Online (Sandbox Code Playgroud)
为我完成这项工作,但我对永久开放连接的想法不屑一顾。
理想情况下,我会编写 MS SS 本身的脚本以每小时执行一段给定的代码,但我不确定这是否可行。
这个问题有什么解决办法吗?
我们有一个“有机”的环境,这意味着人们在代码上堆积了十年,而几乎没有监督或文档。我使用的服务器有几个我认为不再使用的数据库;我很想删除它们,只留下我实际使用的三个。
在鲁莽的极端情况下,我可以禁用这些数据库并等待有人尖叫;另一方面,我可以让它们永远运行“以防万一”。在确定是否正在使用服务器方面,您发现哪些步骤很有价值,以及如何使用?
此外,您建议采取哪些步骤来确保在禁用系统的过程中,它们在一段时间内保持方便地可逆(例如,重命名对象而不是彻底删除它们)?
谢谢!
我有几个表,其中的记录可以用几个广泛的业务领域唯一标识。过去,我将这些字段用作 PK,并考虑到以下好处:
但是,我听说过一个创建合成IDENTITY INT
PK的案例,而是使用单独的UNIQUE
约束来强制执行业务密钥。优点是狭窄的 PK 使得二级索引小得多。
如果一个表有没有比PK其他指标,我看不出有任何理由赞成第二种方法,虽然在一个大表它可能是最好的假设,指数可能在未来是必要的,因此,有利于在狭窄合成PK . 我是否缺少任何考虑?
顺便说一下,我并不是反对在数据仓库中使用合成键,我只是对何时使用单一的宽泛 PK 以及何时使用窄 PK 加上宽泛的 UK 感兴趣。
sql-server ×5
compression ×1
delete ×1
disk-space ×1
dtexec ×1
index-tuning ×1
maintenance ×1
permissions ×1
primary-key ×1
schema ×1
shutdown ×1
ssis ×1
tools ×1