我知道收缩是魔鬼:它会颠倒页面顺序并导致皮肤癌、数据碎片化和全球变暖。名单还在继续……话虽如此,假设我有一个 100 GB 的数据库,我删除了 50 GB 的数据——不是在一个表上,而是在数据库范围内对旧数据进行一般修剪,覆盖 90% 的数据表——这是否构成缩小数据库的适当用例?
如果没有,从数据库中删除如此高比例的数据后,应采取哪些适当的步骤来清理房屋?我可以想到两个:重建索引和更新统计。还有什么?
您好,我正在将数据库迁移到 SQL Server 2012,但遇到了问题。
首先让我说应用程序 (ISV) 具有可怕的安全性!所以尽量不要畏缩太多。
所以 2012 实例上的 sa 密码必须与应用登录名匹配。但是,它不符合 2012 年密码要求。
有没有办法覆盖这个功能?
我有这张桌子:
CREATE TABLE [dbo].[relatea] (
[mid] [varchar](16) NOT NULL,
[sid] [varchar](16) NOT NULL
)
Run Code Online (Sandbox Code Playgroud)
它存储哈希匹配。将其作为堆有什么好处吗?它有大约 700 万行,并且值在任一列中都不是唯一的。我知道堆通常对任何大表都不好。此表当前没有索引。
我正在考虑将表格更改为:
CREATE TABLE [dbo].[relatea] (
[mid] [varchar](16) NOT NULL,
[sid] [varchar](16) NOT NULL,
CONSTRAINT [pk_relatea] PRIMARY KEY CLUSTERED (
[mid] ASC,
[sid] ASC
)
)
Run Code Online (Sandbox Code Playgroud)
表的查询一般但不总是在sid和组合mid,并sid应始终是唯一的。
与将表保留为堆相比,创建这样的聚集索引是否更好?
我正在一个单独的盒子上从 SQL Server 2008 R2 实例转移到 SQL Server 2012 实例。我想恢复msdb以获取我所有的代理工作等,但出现以下错误:
数据库 'msdb' 的还原失败。
(Microsoft.SqlServer.Management.RelationalEngineTasks)
System.Data.SqlClient.SqlError: 设备上系统数据库的备份\10.0.0.3\BackUps\NOFAULT2010_msdb_FULL_20121016_220006.bak 无法恢复,因为它是由不同版本的服务器创建的(10.50.1600) 比这台服务器 (11.00.2100)。
(Microsoft.SqlServer.SmoExtended)
如果我试图从 2012 年到 2008 年,我会理解这一点,但这对我来说是新的。
无论如何要让它发挥作用?或者,如果不是转移代理工作、用户、blazi blah 的最佳方式?
谢谢
我最近将一个物理 SQL Server 机器 (2012) 迁移到 ESX (5.1),只是为了便于管理。它是并且将是服务器上唯一的来宾。正如预期的那样,在大多数情况下只有在启动时才会出现边际性能下降。这就是我的问题。
我注意到,在虚拟化下,缓冲池占用的内存比其物理对应物慢得多。
在 2 天内运行 SQL 服务器的物理安装已分配所有 120GB 的内存分配(最大服务器内存)。但是,在虚拟机管理程序中运行几乎完全相同的设置(我还为来宾提供了完全保留的内存),它花了 7 周的时间才达到 50GB。这也是令人痛苦的缓慢,例如每天 Gb 上升,这转化为几天的缓慢查询。
因此,虽然我在多客人盒子上看到过这种情况并将其归因于内存压力,但我对为什么在单个客人盒子上发生这种情况感到困惑。我知道 vmware 会压缩和重复数据删除内存,但是其中大部分是唯一数据。
所以我的问题是:
1) 为什么会发生这种情况?我对导致这种情况的确切机制感兴趣。
2) 有没有一种方法可以在完全内存分配的情况下启动 SQL 服务器?我记得类似跟踪标志的东西,但还没有找到 64 位的任何东西。这是必要的吗?
提前致谢。
我在重新启动后的前几天注意到的另一件事是 PLE 在 500 - 900 范围内保持非常低,这会随着缓冲池的增长而增加。
嗨,我偶然发现了一个旧式 SQL 2000 服务器的管理,该服务器在过去 8 年中几乎没有维护(而且速度非常慢)。因为我在过去 2 年里只做 DBA / PT(我主要是一名开发人员),所以我没有 2000 年的经验。任何人都可以指点我一些维护、调整脚本的方向。只是想在我为我很少使用的东西重新发明轮子之前先问一下。
谢谢伙计们/女孩们!
我有以下查询(针对问题进行了简化)我正在尝试加快只读数据库的速度...
SELECT
[sysid]
,[Date]=CONVERT(CHAR, DATEADD(D, [date], '1800-12-28'),101)
,[From]=[from_addr]
,[To]=[to_addr] --I'm a very long Text or NVARCHAR(MAX) Field
,[Subject]=[subject]
,CASE WHEN [attach] = 1 THEN 'Yes' ELSE 'No' END AS 'Att'
,[Code]=[ccode]
,[Staff]=[staff]
,[MatNo]=[mat_no]
FROM dbo.[email]
DYNAMIC WHERE CLAUSE ON ANY OF ABOVE
Run Code Online (Sandbox Code Playgroud)
我已经尝试添加一些索引,包括覆盖索引我不能包含 to_addr 的方式(作为文本或 NVARCHAR(MAX) col),并且查询优化器最终使用聚集索引,因为不包含 to_addr 字段。有什么方法可以处理这样的情况?不幸的是,我仅限于 2005 年。
尝试添加 Full_Text For to_addr 仍然进行表扫描。但是,如果我注释掉该行,它将使用索引。:(该死的文本数据!
performance index sql-server-2005 sql-server index-tuning query-performance
sql-server ×7
index ×2
disk-space ×1
heap ×1
index-tuning ×1
maintenance ×1
memory ×1
performance ×1
shrink ×1
vmware ×1