小编Cou*_*000的帖子

连接不同地理区域的数据库的最佳实践

我们即将在不同的国家设置 SQL Server。我们需要链接它们,但我们不必有直接链接(如在链接服务器中)。换句话说,它们可以松散耦合。

是通过 VPN 连接它们并将它们作为链接服务器,还是通过 Web 服务使用松散耦合更好?

“更好”,我指的是稳定性。

sql-server-2008 best-practices network

12
推荐指数
1
解决办法
523
查看次数

TempDB 版本存储清理

据我所知,版本存储只会清理比最旧的活动事务旧的版本。问题:最旧的事务数据库是特定的还是 SQL Server 将保留所有版本,无论数据库如何,如果有一个较旧的事务仍然处于活动状态,期间?

Backstory - SQL Server 2005 SP4 Enterprise 托管大约 40 个数据库。TempDB 当前为 102 GB,版本存储约为 98 GB。数据库实例上托管的应用程序之一有一个基于 sys.dm...database_transactions 的 40 天前的打开事务。两个独立的大型数据库在上个月的使用量非常大,我们看到与这些操作一致的 TempDB 增长。我们预计会有一些增长。我们没想到它会继续增长。 问题:存储在 TempDB 版本存储中的来自这两个独立数据库的版本是否仍然存在,因为第三个独立数据库具有 40 天前的连接并显示打开的事务状态?

Perfmon 计数器:在我今天早上跟踪它的几个小时内,版本存储不断增长。版本生成速率 AVG 约为 30 kb/s,版本清理速率为 0 kb/s。

为 TempDB 留下了大量空间,所有用户数据库的数据文件总数约为 300 GB,自上次重新启动以来,TempDB 的 8 个数据文件中的每一个每天平均增长 350 MB。此行为异常,调查发现大版本存储

对评论问题的回答,以免出现长时间运行的评论部分:

问:为什么在 tempdb 上自动增长?答:TempDB 设置为以我们认为适合大多数时间的大小进行初始化。我们允许自动增长以处理异常的数据库活动。我们也监控自动增长。

问:你怎么知道事务是活跃的,而不仅仅是一个活跃的连接?A:transaction_state 表示在 sys.dm_tran_active_snapshot_database_transactions 和其他东西中处于活动状态。活动监视器说每个连接有 1 个打开的事务。

问:为什么你的应用程序如此愚蠢?A:第三方。此实例中的众多实例之一。我不知道这种行为是否异常,或者很容易修复。

解析度

开放交易(或多个),其中防止任何版本存储清理,乔恩是正确的,版本存储清理是数据库地独立。关闭违规事务允许开始版本存储清理。原因背后的当前理论来自 Jon Seigel

版本存储只能根据整个实例内最旧的活动事务清除版本,以支持同时跨多个数据库使用事务级快照隔离。

如果有人确切知道或可以证明这一点,请这样做

参考问题:find-transactions-that-are-filling-up-the-version-store

参考文档:
TempDB 2005 WP
Teratrax tuning tempDB …

sql-server-2005 sql-server tempdb tempdb-version-store

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

我应该定期缩小我的数据库或至少我的日志文件吗?

我的问题是,我应该定期运行一个或两个收缩命令,

DBCC 收缩数据库

或者

DBCC 收缩文件

==============================

背景

Sql Server:数据库为 200 gigs,日志为 150 gigs。

运行这个命令

SELECT name ,size/128.0 - 
CAST(FILEPROPERTY(name, 'SpaceUsed') AS int) / 128.0 
AS AvailableSpaceInMB FROM sys.database_files;`
Run Code Online (Sandbox Code Playgroud)

产生这个输出..

MyDB:159.812500 MB 可用空间

MyDB_Log:149476.390625 MB 可用空间

所以似乎有一些可用空间。

我们的备份时间表如下:

  1. 交易日志每小时一次
  2. 每周两次完全备份
  3. 每周 5 次差异备份

sql-server maintenance dbcc

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

身份主键索引如何变得碎片化?

根据我对索引碎片的理解,这应该是不可能的。我在我的数据库中发现的案例是非集群的。

例子:

ALTER TABLE [dbo].[ClaimLineInstitutional] ADD  CONSTRAINT [PK_ClaimLineInsitutional]  
PRIMARY KEY NONCLUSTERED 
(
    [ClaimLineInstitutionalID] ASC
)WITH (PAD_INDEX  = ON, STATISTICS_NORECOMPUTE  = OFF, SORT_IN_TEMPDB = OFF,   
IGNORE_DUP_KEY = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON,    
FILLFACTOR = 100) ON [PRIMARY]
Run Code Online (Sandbox Code Playgroud)

更新:

我正在查询 dm_db_index_physical_stats.avg_fragmentation_in_percent,所以我相信这是我看到的物理碎片。

index sql-server primary-key index-tuning fragmentation

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

即使模型设置为 false,自动关闭属性也会在附加 db 后重置为 true

我正在使用 SQL Server Express 2008 R2。新创建的数据库的自动关闭属性将设置为与模型 db 相同的值。在我的例子中,我已经将模型的 autoclose 设置为 false,这样当我创建一个新数据库时,它也会将 autoclose 设置为 false。

如果我将自动关闭设置为 false 的数据库分离然后附加它,则自动关闭设置为 true。我期望 autoclose 为假,因为它将从模型数据库继承其属性。在我的情况下,分离和附加数据库会导致 autoclose 属性设置为 true。

为什么会这样?这个问题有什么解决办法吗?

database-design sql-server sql-server-2008-r2

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