据我了解,当您为表启用 StretchDB 功能时,基本上会在本地创建一个链接服务器,该服务器将远程服务器作为将数据移动到的目标。
如果这是正确的,这是否意味着他们会遇到同样的问题?如:
- 获取所有数据然后过滤
- 可怕的数据统计
Kendra Little在 Brent Ozar 的网站上有一段Youtube 视频概述了其中的一些问题。
据我了解,当您为表启用 StretchDB 功能时,基本上会在本地创建一个链接服务器,该服务器将远程服务器作为将数据移动到的目标。
如果这是正确的,这是否意味着他们会遇到同样的问题?如:
Kendra Little在 Brent Ozar 的网站上有一段Youtube 视频概述了其中的一些问题。
我一直在看SQL Server:Paul Randal在 Pluralsights 上的高级损坏恢复技术。在第 4 单元中,他讨论了一个事实,即如果您丢失了日志文件,那么了解数据库是否完全关闭是很重要的。这将决定 SQL Server 是否将运行崩溃恢复。
他接着提到,可以在数据库引导页面中找到此标志(1:9 是我根据课程材料做出的假设,并通过Microsoft 上的此链接进行了备份)。但是,我没有看到页面内有任何明显的标志使用 -
DBCC TRACEON (3604);
DBCC PAGE ('stack',1, 9, 2) WITH TABLERESULTS;
DBCC TRACEOFF (3604);
在网上找这个,我找不到关于引导页的信息(1:9)。我发现sys.databases
有一列is_cleanly_shutdown
代表:
1 = 数据库完全关闭;启动时无需恢复
0 = 数据库没有完全关闭;启动时需要恢复
但是,我想继续上课,有人可以告诉我在引导页面中寻找什么吗?另外,如何让数据库显示它已完全关闭或执行此操作的正确步骤?
我正在运行 SQL Server 2012。
在回顾估计的执行计划创建过程时,我在 Grant Fritchey 的 SQL Server 执行计划中看到了这一部分,他提到:
生成估计执行计划的优化器不执行 T-SQL。它确实通过代数器运行语句……负责验证数据库对象的名称。由于 SQL Server 还没有执行查询,临时表还不存在。这是错误的原因。通过实际的执行计划运行同样的代码将完美地工作。
他在书中引用了这段代码:
CREATE TABLE TempTable
(
Id INT IDENTITY(1, 1)
);
INSERT INTO TempTable
DEFAULT VALUES
SELECT *
FROM TempTable;
您将收到的错误是
消息 208,级别 16,状态 1,第 7 行对象名称“TempTable”无效。
对我来说,这不是临时表,而是实际表。所以当我尝试使用临时“#”表时。我发现生成的估计执行计划没有问题。此处显示了生成的估计计划。
Create table #temp
(
ID INT IDENTITY (1,1)
)
Insert into #temp
DEFAULT VALUES
SELECT *
FROM #temp
有人可以解释为什么会有这种差异吗?不应该生成#table 吗?
Fritchey, G. (2012)。SQL Server 执行计划。美国斯普林菲尔德:Simple Talk Publishing。
是否可以让 SQL Server 在一定时间后自动回滚您的事务以避免造成阻塞/锁定?我过去曾对此感到内疚,我从许多其他人那里听说这是一个常见的错误。
例如:在进行删除/更新时,我总是使用这样的块。
BEGIN TRAN
--SQL Code Here
ROLLBACK TRAN
COMMIT TRAN
这使我可以查看有多少行受到影响或对数据执行选择,然后我可以注释掉ROLLBACK
哪个会自动COMMIT
.TRANSACTION
但是,有可能没有COMMIT
突出显示/选择导致事务挂起。我正在寻找的是一个设置,例如:
BEGIN TRAN 15 Seconds
--SQL Code Here
ROLLBACK TRAN
COMMIT TRAN
这只会使交易最多保持 15 秒的开放时间。
如果这是不可能的,有没有人有更好的工作流程?
我正在阅读谁在备份该数据库?由 Kendra little 撰写,特别是“如果备份成功,您可以尝试另一个技巧”部分。
我一直在研究监控我的数据库,以便在数据库备份到我的备份路径之外的另一个位置时发送电子邮件。到目前为止,我想出的是设置一个每 5 分钟触发一次的作业,其中包含以下脚本:
BEGIN
IF (SELECT COUNT (bmf.physical_device_name)
FROM [msdb].[dbo].[backupset] bs inner join [msdb].[dbo].[backupmediafamily] bmf
on bs.media_set_id = bmf.media_set_id
where bs.[database_name] = 'logbackuptest'
and bmf.physical_device_name not like 'D:\backups\%') > 0
EXEC msdb.dbo.sp_send_dbmail
@profile_name = 'DBA Profile',
@recipients = '[email protected]',
@body = 'The database was backed up to a different location',
@subject = 'A database was backed up to a different location' ;
END
还有其他人有好的博客文章或任何其他想法吗?我不会在我不知情的情况下在非默认位置进行备份;这个问题纯粹是学术性的。
我有几个关于 SQL Server 错误日志的问题。
我正在阅读 Grant Fritchey 的 SQL Server 执行计划,他提到:
SQL Server 不会永远将执行计划保存在内存中。使用“年龄”公式将计划的估计成本乘以计划的使用次数,它们就会慢慢从系统中老化出来。lazywriter 进程是一个内部进程,负责释放所有类型的缓存(包括计划缓存),它会定期扫描缓存中的对象,每次将此值减一。
如果满足以下条件,该计划将从内存中删除:
- 系统需要更多内存
- 计划的“年龄”已为零
- 该计划当前未被现有连接引用。
他还在本书的前面提到了以下内容:
一旦优化器得出一个执行计划,估计的计划就会被创建并存储在一个称为计划缓存的内存空间中——尽管如果计划已经存在于缓存中,这一切都是不同的。
如果实际计划和估计计划不同,我会假设该计划理论上可以达到零。这将使估计的计划执行计数为零,即使它存储在缓存中也是如此。
我的问题是计划年龄可能达到零的不同情况有哪些?我的假设是否正确?
Fritchey, G. (2012)。SQL Server 执行计划。美国斯普林菲尔德:Simple Talk Publishing。
我有几个供应商数据库,其中大部分 (99%) 表都聚集在 GUID 上。目前我们每个周末都在重建表格。此时大多数表的碎片化程度达到 80% 或更多。
除了这种无休止的循环,我们不重建会更好吗?
更频繁地更新静态信息而不是重建索引会更有益吗?
我已经阅读了 Brent Ozar 的Stop Worrying About SQL Server Fragmentation,但它并没有真正回答我的问题。我希望有一篇更完整的文章,并且可能是最近更新的文章。
我尽量不这样做,因为我知道这是没有必要的。如果有助于更好地了解我的情况,请从 Brent 的博客再次查看本文的开头部分。我希望有一个包含文章和用例的正式计划,以便在进行更改之前向管理层提出建议并阅读适当的文档。
我正在为我们的生产数据库设计一个新的维护计划。我们唯一的维护是每周重建。有几个(30 多个)数据库都在 700 GB-1.2 TB 左右。表的最大尺寸范围为 100-300 GB。
我希望有一个更好的维护计划,最终提供更好的性能。
是否存在与 Sys.columns 中的 system_type_id 对应的数据类型的列表。我正在寻找一种简单的方法来检查我们在数据库中的列,并且我想避免使用 INFORMATION_SCHEMA.COLUMNS。
我们有一个数据库,它对数据中的大多数列使用 GUID(非顺序)。是否有人对 hgih 插入/更新数据库中 GUID 数据库的填充因子有任何最佳建议?
关于维护窗口,我们每晚都有停机时间,通常在周末关闭。
Microsoft SQL Server 是否支持无符号整数数据类型?
我正在尝试更多地了解数据类型的选择,并在他的数据库项目中帮助一位朋友,我知道 MySQL 可以。
我希望在不实际进入该领域的情况下提高我的知识,我想知道当您承担安装了 SQL-Server 的服务器的责任时您采取了哪些初始步骤。有一些基础知识,如硬件清单、权限、备份。但是你还做什么?我确实在一些论坛上找到了一些不错的信息,例如...