我们即将在不同的国家设置 SQL Server。我们需要链接它们,但我们不必有直接链接(如在链接服务器中)。换句话说,它们可以松散耦合。
是通过 VPN 连接它们并将它们作为链接服务器,还是通过 Web 服务使用松散耦合更好?
“更好”,我指的是稳定性。
据我所知,版本存储只会清理比最旧的活动事务旧的版本。问题:最旧的事务数据库是特定的还是 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
我的问题是,我应该定期运行一个或两个收缩命令,
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 可用空间
所以似乎有一些可用空间。
我们的备份时间表如下:
根据我对索引碎片的理解,这应该是不可能的。我在我的数据库中发现的案例是非集群的。
例子:
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,所以我相信这是我看到的物理碎片。
我正在使用 SQL Server Express 2008 R2。新创建的数据库的自动关闭属性将设置为与模型 db 相同的值。在我的例子中,我已经将模型的 autoclose 设置为 false,这样当我创建一个新数据库时,它也会将 autoclose 设置为 false。
如果我将自动关闭设置为 false 的数据库分离然后附加它,则自动关闭设置为 true。我期望 autoclose 为假,因为它将从模型数据库继承其属性。在我的情况下,分离和附加数据库会导致 autoclose 属性设置为 true。
为什么会这样?这个问题有什么解决办法吗?
sql-server ×4
dbcc ×1
index ×1
index-tuning ×1
maintenance ×1
network ×1
primary-key ×1
tempdb ×1