我正在构建一个带有 48 GB RAM、1 个 CPU 和 8 个 SATA III (6GB/s) SSD 驱动器 (128 GB Crucial m4) 和一个 LSI MegaRAID 控制器 (SAS 9265-8i) 的 SQL Server。我希望典型的工作负载主要是读取。会有一些较重的写入活动(每小时数据与 3rd 方数据提供商同步 - 每晚备份),但我怀疑典型的读/写比率约为 90% 读取/10% 写入。
选项 1:
逻辑驱动器 C:- RAID 1(2 个物理驱动器)- OS
逻辑驱动器 D:- RAID 10(6 个物理驱动器)- DB 文件/日志/tempdb/备份?
或者
选项 2:
逻辑驱动器 C:- RAID 1(2 个物理驱动器)- OS
逻辑驱动器 D:- RAID 1(2 个物理驱动器)- Db 文件
逻辑驱动器 E:- RAID 1(2 个物理驱动器)- 日志文件/备份?
逻辑驱动器 F:- RAID 1(2 个物理驱动器)- tempdb
或者
选项 3: …
在诊断基数估计不佳的 SQL Server 2008 R2 查询(尽管有简单的索引、最新的统计数据等)和查询计划不佳时,我发现了一篇可能相关的知识库文章: FIX:运行查询时性能不佳包含 SQL Server 2008 或 SQL Server 2008 R2 或 SQL Server 2012 中的关联 AND 谓词
我可以猜测知识库文章中“相关”的含义,例如谓词#2 和谓词#1 主要针对相同的行。
但我不知道 SQL Server 是如何知道这些相关性的。表是否需要包含来自两个谓词的列的多列索引?SQL 是否使用统计信息来检查一列中的值是否与另一列相关?还是使用了其他方法?
我问这个有两个原因:
performance sql-server statistics sql-server-2008-r2 query-performance
使用 SQL Server 导入和导出向导,我收到此错误:
错误 0xc0202009:数据流任务 1:SSIS 错误代码 DTS_E_OLEDBERROR。
发生 OLE DB 错误。错误代码:0x80004005。
由于文件组“PRIMARY”中的磁盘空间不足,无法为数据库“database”分配新页。通过删除文件组中的对象、向文件组添加其他文件或为文件组中的现有文件设置自动增长来创建必要的空间。
我正在尝试上传一系列 2GB 文件,在加载第 4 个文件时,即使在我转到数据库属性 > 文件并将文件组的自动增长更改为 2500 MB 和 maxsize 无限制后,我仍然继续收到上述错误消息。
最好的解决方法是什么?这些数据最终将占用大约 60-80GB。
现代 SQL Server 中有两种不同的页面验证选项;被撕裂页面检测和校验和。无当然也是一种选择。
我相信校验和是在 SQL Server 2005 中引入的,并且从先前版本升级或恢复数据库将保持其先前的页面验证方法。即没有隐式升级。
所涉及的问题是我们有一个生产数据库,该数据库使用 SQL Server 2000 投入生产,此后转移到 SQL Server 2008 R2 服务器。当我一直期望它是Torn Page Detection时,页面验证被设置为None。回顾这段时间,我们似乎认为 DB 最初是在 SQL Server 7.0 中开发的,然后迁移到 SQL Server 2000,这可以解释观察到的结果。
我想知道撕裂页面检测和校验和何时成为 SQL Server 的一项功能,以及它们在迁移或升级到新版本时的表现。
编辑:总结一些答案:
撕裂页面检测进入 SQL Server 的某些日期存在一些差异。
链接 1:http
: //support.microsoft.com/kb/230785
链接 2:http : //technet.microsoft.com/en-us/library/aa337525(v=sql.90).aspx
第一个链接指示 SQL 7.0 和第二个 SQL2000。我倾向于相信 SQL7.0 的建议,并且链接 2 对它在 SQL7.0 中默认关闭而在 SQL2000 中默认打开感到困惑。
在我的应用程序中,有一个运行在 SQL Server 2012 上的数据库,我有一个作业(计划任务),它定期执行一个昂贵的查询并将结果写入一个表,稍后可以由应用程序查询。
理想情况下,我只想在自上次执行查询后发生更改时运行该昂贵的查询。由于源表非常大,我不能只选择所有候选列的校验和或类似的东西。
我有以下想法:
但是,我真的很想知道是否有一种轻量级的方法来检测表上的更改,而无需我明确跟踪写入。例如,我可以获取ROWVERSION表格的“当前”或类似的信息吗?
我有两个 SSIS 包,它们作为更大的 SSIS 部署的一部分在夜间(通过 SQL Server 代理)运行,没有任何问题。一切都使用 Windows 身份验证,计划作业由系统管理员(好吧,我)拥有并作为SQL Server 代理服务帐户运行。
因此,数据基本上在source system ~> transit db ~> staging ~> NDS一夜之间消失了。
我关心的两个 SSIS 包分别处理一组特定数据的transit db ~> staging和staging ~> NDS部分。
域用户(非系统管理员)在 中执行某些操作source system并将有趣的数据推送到 中transit db,因此我需要一种方法来在工作时间内获取此更新的数据以更新NDS:决定此人触发的最简单方法该 ETL 是通过单击启用宏的 Excel 工作簿中的按钮来实现的,该工作簿通过 ODBC(使用 Windows 身份验证)连接到 SQL Server 并执行存储过程。
存储过程如下所示:
create procedure dbo.UpdateMaterialInventory
as
begin
execute msdb.dbo.UpdateMaterialInventory;
end
Run Code Online (Sandbox Code Playgroud)
[msdb] 中的“姐妹”存储过程如下所示:
create procedure dbo.UpdateMaterialInventory
with execute as 'SqlAgentProxy'
as
begin
execute msdb.dbo.sp_start_job …Run Code Online (Sandbox Code Playgroud) sql-server permissions ssis sql-server-agent sql-server-2014
考虑这两个函数:
ROW_NUMBER() OVER (PARTITION BY A,B ORDER BY C)
ROW_NUMBER() OVER (PARTITION BY B,A ORDER BY C)
Run Code Online (Sandbox Code Playgroud)
据我了解,它们产生完全相同的结果。换句话说,您在PARTITION BY子句中列出列的顺序无关紧要。
如果有一个索引,(A,B,C)我希望优化器在两个变体中都使用这个索引。
但是,令人惊讶的是,优化器决定在第二个变体中进行额外的显式排序。
我在 SQL Server 2008 Standard 和 SQL Server 2014 Express 上见过它。
这是我用来重现它的完整脚本。
在 Microsoft SQL Server 2014 上试用 - 12.0.2000.8 (X64) 2014 年 2 月 20 日 20:04:26 版权所有 (c) Microsoft Corporation Express Edition(64 位),Windows NT 6.1(内部版本 7601:Service Pack 1)
和 Microsoft SQL Server 2014 (SP1-CU7) (KB3162659) - 12.0.4459.0 (X64) 2016 年 5 月 27 …
使用页面压缩 ( ALTER INDEX IX1 REBUILD PARTITION = ALL WITH (DATA_COMPRESSION = PAGE))重建其 SQL Server 索引后,后续重建(如某些维护脚本超过某个碎片阈值所做的那样)是否需要再次指定数据压缩?否则索引会被有效地解压吗?
我在生产数据库中有一个表,其大小为 525 GB,其中 383 GB 未使用:
我想回收其中的一些空间,但是,在弄乱生产数据库之前,我正在测试数据库中数据较少的相同表上测试一些策略。这个表有一个类似的问题:
关于表的一些信息:
服务器正在运行 SQL Server 2017 (RTM-GDR) (KB4505224) - 14.0.2027.2 (X64)。数据库正在使用SIMPLE恢复模型。
我尝试过的一些事情:
ALTER INDEX ALL ON dbo.MyTable REBUILD. 这产生了微不足道的影响。ALTER INDEX ALL ON dbo.MyTable REORGANIZE WITH(LOB_COMPACTION = ON). 这产生了微不足道的影响。将 LOB 列复制到另一个表,删除该列,重新创建该列,并将数据复制回来(如这篇文章所述:释放未使用的空间 SQL Server 表)。这减少了未使用的空间,但似乎只是将其转换为已用空间:
使用 bcp 实用程序导出表、截断它并重新加载它(如这篇文章所述:如何为表释放未使用的空间)。这也减少了未使用的空间并增加了与上图类似的程度。
DBCC CLEANTABLE('myDB', 'dbo.myTable')没什么区别sql-server ×10
index ×2
compression ×1
data-pages ×1
performance ×1
permissions ×1
ssis ×1
statistics ×1
storage ×1