自 SQL Server 6.5 以来,我一直在使用 SQL Server,但仍然萦绕在我脑海中的旧建议是永远不要进行就地升级。
我目前正在将我的 2008 R2 DEV 和 TEST 系统升级到 SQL Server 2012,并且需要使用相同的硬件。不必恢复我的报告服务配置的想法非常有吸引力,我真的很聪明。不涉及分析服务或任何不寻常或非标准的东西——只安装了数据库引擎和报告服务。
有没有人遇到过就地升级的严重问题?或者我应该重新评估我对就地升级的立场?
这是你应该拥有的相当普遍的知识
SET NOCOUNT ON
Run Code Online (Sandbox Code Playgroud)
默认在创建新存储过程时。
Microsoft 已在 2012 年更改了默认模板以包含此内容。我认为这对于触发器应该是相同的,但它并未包含在模板中。
这是故意的还是只是疏忽?
我们使用 SQL 身份验证(以减少连接池的数量)和 .NET 4.0 连接字符串连接到 Windows 2008 R2 Enterprise Server 上的 SQL Server Enterprise Edition 2012 SP1:
Microsoft SQL Server 2012 (SP1) - 11.0.3000.0 (X64)
2012 年 10 月 19 日 13:38:57
版权所有 (c) Microsoft Corporation
Enterprise Edition(64 位)在 Windows NT 6.1(Build 7601:Service Pack 1)上
我们使用大约 50 个服务器分成 8 个不同的组,网站的不同部分。
我们的网站正在使用此 SQL Server 来记录访问跟踪数据。在过去的几天里,它发出了有关重置连接池的以下消息:
客户端无法重用 SPID 1327 的会话,该会话已为连接池重置。失败 ID 为 46。此错误可能是由较早的操作失败引起的。在此错误消息之前立即检查错误日志中是否有失败的操作。
错误日志如下:
错误:18056,严重性:20,状态:46
。客户端无法重用 SPID 959 的会话,该会话已为连接池重置。失败 ID 为 46。此错误可能是由较早的操作失败引起的。在此错误消息之前立即检查错误日志中是否有失败的操作。
用户“xxxx”登录失败。原因:重新验证连接上的登录时,无法打开登录对象中配置的数据库“xxxxxxxx”。[客户:10.xx.xx.xxx]
经过一番挖掘,我在 CSS 博客上找到了这篇文档:它是如何工作的:错误 18056 – 客户端无法重用带有 SPID …
由于主站点带宽已经消失,我们今天已切换到我们的备份 DC。
我们遇到了最强大的数据库服务器的问题;它正在为服务器上的几个数据库生成以下过程。一个数据库只是一个用于维护工具的小型临时数据库,因此不会被复制或镜像。
有谁知道或认识以下代码?
() select table_id, item_guid, oplsn_fseqno, oplsn_bOffset, oplsn_slotid
from [<dbname>].[sys].[filetable_updates_2105058535] with (readpast)
order by table_id
Run Code Online (Sandbox Code Playgroud) 我已经提取了一个没有索引的 FK 列表。
如果 FK 没有专门的索引,但它是用于覆盖查询的更广泛索引的一部分,是否应该创建专门的索引?
例如,下面的 mytable 是一个 20 列的表,其中包含一个 varchar(255) 和其余的整数、日期时间或小整数。
它缺少索引
AdvertiserId
Dirty
MasterAdGroupId
Run Code Online (Sandbox Code Playgroud)
AdvertiserID 缺少外键索引,但 [advertiserID] 是索引的一部分,其中 [dirty]&[error] 是 smallint。这应该有自己的专用索引吗?
我应该删除其中一些索引并将它们与包含的列结合起来吗?然后为我的外键设置专用索引?
index_keys
-------------
[AdvertiserAdGroupId]
[AdvertiserHierarchyId]
[AdvertiserHierarchyId], [AdvertiserAdGroupId], [MasterAdGroupId]
[AdvertiserAdGroupCode]
[AdvertiserAdGroupId], [MasterAdGroupId], [AdvertiserId]
[AdvertiserId], [Dirty], [Error]
[MasterAdGroupId], [Deleted], [AdvertiserAdGroupId]
[AdvertiserHierarchyId], [Error], [AdvertiserAdGroupId], [MasterAdGroupId], [Deleted]
[Error], [AdvertiserHierarchyId], [Dirty], [AdvertiserAdGroupId]
[MasterAdGroupId], [AdvertiserAdGroupId], [AdvertiserHierarchyId]
[AdvertiserId], [AdvertiserAdGroupCode], [LastSyncedDate], [CreatedDate]
[AdvertiserId], [Deleted], [Paused], [AdvertiserAdGroupCode]
Run Code Online (Sandbox Code Playgroud) 我使用了下面来自 Kevin Kline 的著名查询来检查未使用的索引。在外键上创建的几个索引不返回读取统计信息,只返回写入。
删除这些索引是否 100% 安全?或者它们是否可以被优化器用于插入或删除,并且不会在 DMV 中注册任何统计信息??如果是这样,如何判断它们是 100% 安全去除的?
我已经让服务器运行了 2 个月,所以我确信我已经涵盖了我们每月的工作负载周期。
SELECT o.name
, indexname=i.name
, i.index_id
, reads=user_seeks + user_scans + user_lookups
, writes = user_updates
, rows = (SELECT SUM(p.rows) FROM sys.partitions p WHERE p.index_id = s.index_id AND s.object_id = p.object_id)
, CASE
WHEN s.user_updates < 1 THEN 100
ELSE 1.00 * (s.user_seeks + s.user_scans + s.user_lookups) / s.user_updates
END AS reads_per_write
, 'DROP INDEX ' + QUOTENAME(i.name) + ' ON ' + QUOTENAME(c.name) + …Run Code Online (Sandbox Code Playgroud) 我目前正在经历这项工作陷入我的夜间维护解决方案 -
ALTER INDEX [PK_ThirdPartySettleCalled] ON [evo_archive].[dbo].[ThirdPartySettleCalled]
REORGANIZE WITH (LOB_COMPACTION = ON)
Run Code Online (Sandbox Code Playgroud)
表格的完整重新索引有效。
但我正在使用 Ola Hallengren 的出色解决方案,就像我在许多需要维护解决方案的网站上所做的那样。http://ola.hallengren.com/Documentation.html并且工作卡在半夜。
我已经将它作为来自 ssms 的单个语句进行了测试,结果相同,没有错误,我有点缺乏想法。
以前有人遇到过这个问题吗?
没有阻塞,
该表大约有 3 亿行,
基本上我说“卡住”是因为没有其他进程在 SQL Server 中运行,并且它已经重新组织了几个小时没有错误。
它处于相同状态,具有 25% 的碎片或几乎为 0%(在完全重建索引后测试)
我删除了一个高可用性组,禁用了 sql 配置管理器中的选项并重新启动,我还从 Windows 中删除了故障转移群集组件并重新启动。
不幸的是,数据库在两台服务器上都被标记为恢复挂起。
我试图放弃它们,但得到了这个:
消息 3752,级别 16,状态 1,第 1 行
数据库“GEO”当前已加入可用性组。在删除数据库之前,您需要将其从可用性组中删除。
我也尝试恢复数据库但没有成功,并将其设置为紧急模式,但不能:
无法对数据库“GEO”执行该操作,因为它涉及数据库镜像会话或可用性组。不允许对参与数据库镜像会话或可用性组的数据库执行某些操作。
我什至试图通过停止引擎并重命名文件以尝试使其成为可疑文件来暴力破解服务器,但它仍在等待恢复中......我无法重新启用 HADR 设置,因为 Windows 集群已被破坏。
除了 sys.availability_replicas 之外,所有系统目录都是空的,它引用了另一台服务器(几年来我第一次希望回到过去可以访问系统表的美好时光)。
任何想法如何摆脱这些数据库?
我需要在 2 个单独的数据中心运行一个带有 2 个主表的 sql server 日志数据库,同时写入两个数据中心。
我的想法是将数据库恢复到新的数据中心,然后将身份列重新设定为 -1 并将增量设置为 -1,这样在需要合并数据时就不会出现重复的 ID。DATACENTRE1 为正整数,DATACENTRE2 为负整数
-1 的增量会导致任何问题吗?
database-design sql-server auto-increment identity sql-server-2012
如果我继承了当时已经增长到 400GB 1 MB 块的数据库。离线碎片整理是清除所有物理碎片的唯一方法。我遇到的另一个问题是数据和日志文件混合在错误的 RAID 驱动器上。
我可以通过备份数据库来用 1 块石头杀死 2 只鸟,删除它并使用 WITH MOVE 恢复它以将文件放在正确的 RAID 驱动器上。这会消除物理碎片吗?
sql-server ×6
index ×2
dmv ×1
foreign-key ×1
hadr ×1
identity ×1
index-tuning ×1
migration ×1
optimization ×1
ssrs ×1
storage ×1
t-sql ×1
trigger ×1
upgrade ×1