标签: sql-server-2008

在数据库 SQL2008R2 中使用 100 个模式?

我们处于 SSAS 类型的环境中,拥有 100 名客户。

目前,每个客户端都有一个数据库,我们在 SQL Server 2008R2 上每个实例有 200 个。这会限制 snapmanager 能够进行备份,因为建议的数量是每个实例 (netapp) 35 个数据库。

我们正在研究的解决方案之一是整合数据库——使用单独的模式将其中的 150 个收集到一个数据库中。

有没有人做过这样的事情?
每个数据库的模式数量是否有限制,或者我们应该注意的性能问题与使用单独数据库的比较?

谢谢您的回答。

我们需要 Snapmanager 的原因是因为这是我们目前用于 DR 复制的内容,他们的建议是每个实例 35 个数据库,否则备份/传输数据可能需要一个多小时,这打破了我们的 1 小时恢复要求。

但是根据他们的说法,如果我们每个实例有 1 个数据库(或 35 个以下),他们应该能够让它没有问题。

所以这就是为什么我们可能会研究模式,但这意味着每个数据库很可能至少有 100 个模式。

sql-server-2008 database-design

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

按需模糊查找

我们有一个客户表(谁没有?),其中包含许多从业务角度来看是重复的记录。我已经能够创建一个 SSIS 包来执行模糊分组,并报告潜在的重复项。

现在,假设我想在有人进入新客户时进行这种分析。这个想法是对客户名称(可能还有一些其他基本信息,如邮政编码)执行模糊查找,并在继续客户创建表单之前显示潜在的重复项。

这里明显的问题是模糊分组和查找组件是 SSIS 的一部分。如果我想按需运行那些,我必须做一些疯狂的事情,比如将搜索词放在临时表中,运行 SSIS 包,等待它完成,并从输出表中获取结果。这会很慢,很痛苦,并且有严重的并发问题。

因此,另一个想法是使用全文索引。在试用它时,它看起来不合适。它无法捕捉到客户名称的细微拼写错误,或“Company”与“Corporation”与“Co.”或“Anderson”与“Andersen”以及其他此类变体的名称不同的名称。

有没有什么东西可以让 T-SQL 灵活地进行模糊分组/匹配?我可以通过模糊查找来保存标记,但看起来我仍然需要重新实现大部分匹配算法才能使用它们。

sql-server-2008 sql-server ssis

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

事务隔离级别是否也会影响索引?

这是 SQL Server 专家的一个建议:如果我将 SQL Server 2008 事务隔离级别设置为READ UNCOMMITTED,这是否也会影响索引页?

例如,使用ISOLATION LEVEL READ UNCOMMITTEDALLOW_PAGE_LOCKSALLOW_ROW_LOCKS对索引有什么影响(如果有)?

ALTER INDEX IX_FirstName ON Employee
SET (ALLOW_PAGE_LOCKS=OFF, ALLOW_ROW_LOCKS=OFF)
Run Code Online (Sandbox Code Playgroud)

我似乎无法在任何地方找到明确的答案——关于事务隔离级别的 MSDN 文档实际上只讨论了数据页......

sql-server-2008 sql-server transaction isolation-level

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

如何在我使用时锁定行

我希望能够锁定一行,选择它,增加它的值,然后释放锁定。(不锁定其他行,以便其他连接可以与表的其余部分一起使用)

我找到了这个

BEGIN TRAN SELECT * FROM tablename WITH (HOLDLOCK, ROWLOCK)
WHERE ID = 1
Run Code Online (Sandbox Code Playgroud)

我的问题是我做不到

UPDATE tablename
SET columnName = -1
WHERE ID = 2
Run Code Online (Sandbox Code Playgroud)

在我提交上一个事务之前,为什么行锁会锁定整个表?

编辑:

此代码是否保证在此更新命令期间不会更新所选行的数据?

UPDATE [tablename] WITH (ROWLOCK)
SET columnName = columnName + 5
WHERE ID = 1
Run Code Online (Sandbox Code Playgroud)

sql-server-2008 sql-server locking

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

在 CASE 语句中,哪个更快:“WHEN [field] in (0)”或“WHEN [field] = 0”?

我正在查看另一个人编写的存储过程,并且每个WHEN子句都使用IN语句而不是=. 我的直觉告诉我这没有那么快、效率高等等。

例如:

CASE WHEN a.Indicator in ('Yes') then 'something'
     WHEN a.STATUS in (0) then 'something 0'
     WHEN a.STATUS in (1) then 'something 1'
     WHEN a.STATUS in (2) then 'something 2'
     WHEN a.STATUS in (3,4,5,6,7,8) then 'something big'
END
Run Code Online (Sandbox Code Playgroud)

使用IN而不是更快=吗?

performance sql-server-2008 sql-server stored-procedures t-sql query-performance

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

SQL Server 内存使用情况

我试图更多地了解SQL Server的内存使用情况。我似乎无法弄清楚内存缓冲区中究竟存储了什么。我的设置是Windows Server 2008 x64,8 GB RAM,SQL Server 2008标准 R2,最大 SQL Server 内存 6000 MB。

运行 SQL Server 几个小时后,资源监视器显示sqlservr.exe使用了大约 6000 MB 的内存,但是当我检查数据和计划缓存的使用情况时,我得到的内存不到 6000 MB:

Cached plans          2541 MB
Database data cached  2706 MB
Total                 5247 MB
Run Code Online (Sandbox Code Playgroud)

我使用sys.dm_exec_cached_plansys.dm_os_buffer_descriptors找到这些值,所以从这些值中我不知道 750 MB 用于什么......我不认为 SQL Server 正在保留内存,因为这是一台 x64 机器......我错过了什么这里?

sql-server-2008 sql-server

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

varchar 性能影响

之前已经问过这个问题(在 SQL Server 2008 中使用 varchar 的速度影响),但答案不够详细,令我满意。诚然,这不是当前的问题,主要是针对我的教育。

但是,我将尝试将其作为我正在做的一些当前数据库模式工作的具体示例;

选项 A

CREATE TABLE [VMware].[TblHostSystem](
    [ID] [int] IDENTITY(1,1) NOT NULL,
    <snip/>
    [PowerStateID] [int] NOT NULL
)

ALTER TABLE [VMware].[TblHostSystem]  WITH
CHECK ADD  CONSTRAINT [FK_TblHostSystem_TblPowerState]
FOREIGN KEY([PowerStateID])
REFERENCES [VMware].[TblPowerState] ([ID])
GO

CREATE TABLE [VMware].[TblPowerState](
    [ID] [int] IDENTITY(1,1) NOT NULL,
    [PowerState] [varchar](50) NOT NULL
)
Run Code Online (Sandbox Code Playgroud)

选项 B

CREATE TABLE [VMware].[TblHostSystem](
    [ID] [int] IDENTITY(1,1) NOT NULL,
    <snip/>
    [PowerState] [varchar](50) NOT NULL
)
Run Code Online (Sandbox Code Playgroud)

如果我选择了选项 B(正如模式的前任作者所做的那样),由于主机的功能会经常变化,这会产生什么样的流失?

一些我认为是真实的陈述,

  1. Varchar 存储在 MSSQL 2008 上的同一行/页中。
  2. Varchars 没有填充?

所以我的问题是,当将第二个示例中的 …

performance sql-server-2008 varchar

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

是否建议清除查询计划缓存

和标题描述的差不多。我刚刚检查了一个 SQL Server 并注意到有很多查询计划膨胀可以通过适当的参数化来修复。

对代码进行更改后,是否建议我们清除查询计划缓存并让其自行重建?还是会及时清除?

注意:在前 50 个最大的查询中,有 47 个相同但参数不同。

performance sql-server-2008 sql-server query-performance

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

如何使 FILESTREAM 文件丢失/损坏的数据库联机?

我损坏了数据库中与 FILESTREAM 相关的文件。

.mdf.ldf文件仍然完好,但是当我尝试上网的数据库,它抱怨,说有关FILESTREAM的文件是不正确的。

我不关心存储在 FILESTREAM 中的数据,但我关心其他数据。我可以从.mdf.ldf文件中取回它吗?如何?

当我执行:

sp_attach_db @dbname = 'Demo',
             @filename1 = N'<File path>.mdf',
             @filename2 = N'<File path>.ldf'
Run Code Online (Sandbox Code Playgroud)

答复是:

Msg 5120, Level 16, State 105, Line 1
Unable to open the physical file "<Location>". Operating system error 2: "2(The system cannot find the file specified.)".
Msg 5105, Level 16, State 14, Line 1
A file activation error occurred. The physical file name '<Location>' may be incorrect. Diagnose and correct additional …
Run Code Online (Sandbox Code Playgroud)

sql-server-2008 sql-server corruption filestream

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

如何找出谁是 SQL Server 2008 中的资源猪?

我们在具有 24+GB RAM 和 16 个内核的机器上安装了 SQL Server 2008。加上快速驱动器等。按照我们的标准,这是一台大型机器。

无论如何,那台机器 100% 专用于 SQL Server,并且上面有两个生产数据库。每个数据库来自两个不同的供应商。

这已经运行了2年。

现在,在过去 2 周内,供应商 B 表示 SQL Server 无法处理其 8 GB 数据库的性能。几个月来,我们的结局没有任何变化。我们的数据库服务器没有被触及。

供应商 A 工作得很好。

所以听起来供应商 A 正在占用更多资源并减慢供应商 B 的速度。但我不怀疑供应商 A 是罪魁祸首,因为我熟悉他们的数据库及其用户。

如何找出每个数据库使用了多少资源?我怎么能说供应商 A 获得 50% 和供应商 B 获得服务器的 50%?

performance sql-server-2008

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