小编bum*_*una的帖子

什么时候可以收缩数据库?

我知道收缩是魔鬼:它会颠倒页面顺序并导致皮肤癌、数据碎片化和全球变暖。名单还在继续……话虽如此,假设我有一个 100 GB 的数据库,我删除了 50 GB 的数据——不是在一个表上,而是在数据库范围内对旧数据进行一般修剪,覆盖 90% 的数据表——这是否构成缩小数据库的适当用例?

如果没有,从数据库中删除如此高比例的数据后,应采取哪些适当的步骤来清理房屋?我可以想到两个:重建索引和更新统计。还有什么?

sql-server maintenance shrink disk-space

46
推荐指数
2
解决办法
7万
查看次数

在 SQL Server 2012 中将 SA 设置为弱密码

您好,我正在将数据库迁移到 SQL Server 2012,但遇到了问题。

首先让我说应用程序 (ISV) 具有可怕的安全性!所以尽量不要畏缩太多。

  1. 该应用程序使用 sa 身份验证登录。
  2. sa 密码被硬编码到应用程序中。

所以 2012 实例上的 sa 密码必须与应用登录名匹配。但是,它不符合 2012 年密码要求。

有没有办法覆盖这个功能?

sql-server sql-server-2012

7
推荐指数
1
解决办法
6676
查看次数

使用没有聚集索引的哈希表是否有任何性能优势?

我有这张桌子:

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应始终是唯一的。

与将表保留为堆相比,创建这样的聚集索引是否更好?

index sql-server-2008 database-design sql-server heap

6
推荐指数
1
解决办法
1699
查看次数

将 msdb 从 SQL Server 2008 R2 还原到 SQL Server 2012 实例

我正在一个单独的盒子上从 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 sql-server-2008-r2 sql-server-2012

5
推荐指数
1
解决办法
1万
查看次数

VMWare 下的 SQL Server 缓冲池利用率

我最近将一个物理 SQL Server 机器 (2012) 迁移到 ESX (5.1),只是为了便于管理。它是并且将是服务器上唯一的来宾。正如预期的那样,在大多数情况下只有在启动时才会出现边际性能下降。这就是我的问题。

我注意到,在虚拟化下,缓冲池占用的内存比其物理对应物慢得多。

在 2 天内运行 SQL 服务器的物理安装已分配所有 120GB 的内存分配(最大服务器内存)。但是,在虚拟机管理程序中运行几乎完全相同的设置(我还为来宾提供了完全保留的内存),它花了 7 周的时间才达到 50GB。这也是令人痛苦的缓慢,例如每天 Gb 上升,这转化为几天的缓慢查询。

因此,虽然我在多客人盒子上看到过这种情况并将其归因于内存压力,但我对为什么在单个客人盒子上发生这种情况感到困惑。我知道 vmware 会压缩和重复数据删除内存,但是其中大部分是唯一数据。

所以我的问题是:

1) 为什么会发生这种情况?我对导致这种情况的确切机制感兴趣。

2) 有没有一种方法可以在完全内存分配的情况下启动 SQL 服务器?我记得类似跟踪标志的东西,但还没有找到 64 位的任何东西。这是必要的吗?

提前致谢。


我在重新启动后的前几天注意到的另一件事是 PLE 在 500 - 900 范围内保持非常低,这会随着缓冲池的增长而增加。

sql-server memory vmware

5
推荐指数
1
解决办法
955
查看次数

SQL 2000 维护脚本

嗨,我偶然发现了一个旧式 SQL 2000 服务器的管理,该服务器在过去 8 年中几乎没有维护(而且速度非常慢)。因为我在过去 2 年里只做 DBA / PT(我主要是一名开发人员),所以我没有 2000 年的经验。任何人都可以指点我一些维护、调整脚本的方向。只是想在我为我很少使用的东西重新发明轮子之前先问一下。

谢谢伙计们/女孩们!

sql-server sql-server-2000

4
推荐指数
1
解决办法
2486
查看次数

文本或 NVARCHAR(MAX) 字段的索引策略

我有以下查询(针对问题进行了简化)我正在尝试加快只读数据库的速度...

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

2
推荐指数
1
解决办法
3951
查看次数