I\xe2\x80\x99m 运行 sql server 2012,该计算机上安装的 RAM 为 128 GB。批量插入的性能非常低。批量插入1000万条记录大约需要2小时。我们检查了CPU、磁盘IO、内存,一切似乎都正常。我\xe2\x80\x99ve刚刚检查了wait_type,发现CXPACKET wait_time_ms是79346890761,max_wait_time_ms是2164694,signl_wait_time_ms是2849080871。这些数字是否太高,是否是性能缓慢的原因?并行度设置为0。
\n我有一个包含数百万行的表。这个表有一个我们经常过滤的列(意味着我们经常在WHERE子句中使用它),值是Insert/Update/Ignored。向列添加索引是否有意义?有人告诉我在少数值列上添加索引没有任何好处
我们有一种情况,使用TRIPLE_DES. 这用于加密密码列,并由大约十个存储过程使用(使用这些与OPEN SYMMETRIC KEY SSN_Key_01 DECRYPTION BY CERTIFICATE MyCertificate01;)
我想用AES_192. 但是,如果可能,我宁愿避免编辑存储过程。
我写了以下例程:
我的问题是,对于训练有素的眼睛,这里是否有任何事情会引起警钟,特别是因为旧名称和新名称相同,并且这些名称是在存储过程中使用的?
我已经测试了代码并且它有效,但是我缺乏加密经验和今天的信息过载剂量让我非常紧张,因此请求专业知识......
-- Decrypt data
ALTER TABLE [dbo].[tbl_Users] ADD PasswordClear nvarchar(250) NULL;
GO
OPEN SYMMETRIC KEY SSN_Key_01 DECRYPTION BY CERTIFICATE MyCertificate01;
UPDATE [tbl_Users] SET PasswordClear = CONVERT(nvarchar(250), DECRYPTBYKEY(PasswordEnc))
CLOSE SYMMETRIC KEY SSN_Key_01;
GO
-- Drop old encryption
ALTER TABLE [dbo].[tbl_Users] DROP COLUMN PasswordEnc;
GO
DROP SYMMETRIC KEY SSN_Key_01;
GO
DROP CERTIFICATE [MyCertificate01];
GO
-- Create new certificate …Run Code Online (Sandbox Code Playgroud) sql-server encryption sql-server-2012 certificate symmetric-key
设置
3 节点 Alwayson 群集 - 1 个同步和 1 个异步辅助副本 - SQL Server 2012
情况
从异步辅助副本读取时,我们正在目睹 PageIOLatches。这主要是由于 SAN 的吞吐量受到限制造成的。托管合作伙伴告诉我们,由于硬件限制,无法立即缓解此限制。
主副本和同步副本使用具有更高吞吐量的其他 SAN。虽然这种情况远非理想,但这是一个很快就会解决的暂时情况,不是我的问题。
在调查 IO 等待时,我们注意到这些与检查点页数/秒的增加同时发生。
我的印象是检查点不会出现在 AG 中的辅助副本上,就像这里讨论的那样。
为了验证这种行为,我设置了一个扩展事件来监视异步副本上的检查点事件。正如预期的那样,没有为此数据库捕获任何检查点,也没有从其他数据库中找到与该模式匹配的任何检查点。
接下来,我在主副本上创建了相同的扩展事件,并启动了一个 perfmon 来验证我们是否可以见证相同的行为。在这里,我们能够捕获(自动)检查点,它们大约发生。每分钟一次。这些检查点与辅助(和主要)副本上检查点页数/秒的增加同时发生。似乎正在主副本上生成检查点并在辅助副本上重做。这意味着检查点确实隐式发生在 AG 中的辅助副本上。
题
我的假设是否正确,在 AG 检查点是在主副本上生成并在所有辅助副本上重做?
因此,如果TARGET_RECOVERY_TIME未设置数据库,recovery interval主副本的设置将规定这些数据库的所有辅助副本上的检查点。
sql-server recovery sql-server-2012 checkpoint availability-groups
我想我已经知道答案了,但我还是会问。
情况是:
如果我尝试恢复这些并创建一个 AG - 它会失败。在我重新创建 AG 之前,我需要进行另一个完整的 Db 备份 = 另一个 6 小时。
所以 COPY ONLY 备份是没有用的。除非我错过了什么?这些有什么意义?
我正在 AWS 实例上运行 SQL Server Express 12.0.4100,该实例具有 16 个内核和 64 GB RAM,附加了 3TB 和 9000 IOPS EBS。这已经完美运行了 2 年,直到本周都没有问题。
服务器正在运行一个 web 应用程序,每秒接收 5-10 个请求,每个请求都被转换为对数据库的相同查询,只是参数不同(这都由 ORM 处理)。这些查询(我们称之为GetProduct查询)有点大,因为它们从 13 个表中检索数据以构建发送回给用户的单个 JSON 响应。查询通常需要 800 到 1500 毫秒的时间才能运行。
本周我注意到,当我执行一个查询时,一个简单的选择前 1000 个表中的单个 where 条件也被GetProduct查询扫描,SQL Management Studio 报告的数据库 I/O 使用率上升,在 30MB/s 之间波动和 50MB/s,即使我的查询已经返回(正常的数据库 I/O 在 0.1MB/s 和 1MB/s 之间)。我突然发现我的GetProduct查询现在需要 60 多秒才能完成!导致超时和对数据库执行的所有查询变得非常缓慢。如果我重新启动整个服务器框,这是固定的,一切都会恢复正常,直到我再次运行一个非常奇怪的查询。
我远非数据库专家,我是一名程序员,也负责维护这个数据库,团队中没有一个人对数据库了解很多。我更新了统计数据并注意到我的大多数索引的碎片化程度非常高(SSMS 报告的 95% 到 99% 之间)。我正在计划一个维护窗口,以便我可以删除应用程序并重建所有索引。
碎片会导致这种行为吗?我执行了sp_whoisactive,我确定我的数据库上没有其他任何东西在运行,只是调用GetProduct查询需要很多时间才能完成。
更新
我使用 SSMS 活动监视器中的“最近昂贵的查询”部分获得了查询计划,因为此查询sp_whoisactive @get_plans = 1 …
performance sql-server entity-framework fragmentation sql-server-2012
我有一张每天插入和删除的表。平均记录数为 80,000。大约 20 个字段,其中 10 个是 VARCHAR(4000) 但是大多数记录的这些字段为空。1 个 NC 索引占 8MB。
加载此表的作业按预期运行,没有性能问题。
该表每天缓慢增长 1GB,最小记录数增加(有时会减少)。我似乎无法指出是什么导致了这种情况。任何帮助是极大的赞赏!
我们有一个带有 16 个 CPU 内核的 SQL Server 2012 实例。当查看 sys.dm_os_schedulers 时,我们看到预期的 16 行是“VISIBLE ONLINE”,每个核心一个。错误日志在启动时显示以下标准条目:
SQL Server 检测到 2 个插槽,每个插槽 8 个内核,每个插槽 8 个逻辑处理器,总共 16 个逻辑处理器;使用基于 SQL Server 许可的 16 个逻辑处理器。这是一条情报信息; 无需用户操作。
然而 sys.dm_os_schedulers 也包含大约。1200 行是“HIDDEN ONLINE”。
服务器未使用可用性组或镜像,并且未启用资源调控器。
问题是每个隐藏的调度器似乎都被分配了一个工作线程,所以我们的监控软件不断提醒服务器线程用完,即使查询运行得非常愉快并且似乎对性能没有任何实际影响.
我知道隐藏的调度程序只对内部系统进程可用,但你知道是什么导致显示这么多吗?
我在一次采访中被问到这个问题,如果每个月处理 650MB 的数据,那么独立 SQL 服务器的数据库大小是多少。我在采访中无法给出任何答案,后来也没有找到任何答案。任何帮助将不胜感激。
database-design sql-server disk-space restore sql-server-2012
SQL Server 2012 中是否有办法获取特定日期/时间的服务器时区?在 SQL Server 2016 中,您有AT TIME ZONE,但在 2012 年不可用。我有一个datetimeoffset,我需要将其转换为服务器的时区(在那个日期),然后再将其截断为datetime. SWITCHOFFSET仅当您知道偏移量时才有效,但对于每年更改两次时区的服务器,偏移量会来回翻转。
此查询说明了 SQL Server 2016 中的功能:
SELECT @@SERVERNAME AS [SERVERNAME]
, GETDATE() AT TIME ZONE 'Central Standard Time' AS [GETDATE() AT TIME ZONE 'Central Standard Time']
, GETDATE() AT TIME ZONE 'Eastern Standard Time' AS [GETDATE() AT TIME ZONE 'Eastern Standard Time']
, DATEADD(MONTH, -6, GETDATE()) AT TIME ZONE 'Central Standard Time' AS [DATEADD(MONTH, -6, GETDATE()) AT TIME ZONE 'Central Standard …Run Code Online (Sandbox Code Playgroud) sql-server-2012 ×10
sql-server ×9
performance ×2
backup ×1
certificate ×1
checkpoint ×1
cpu ×1
datetime ×1
disk-space ×1
encryption ×1
recovery ×1
restore ×1
storage ×1
timezone ×1