我有需要测试数据库才能运行的集成测试。
由于测试通常应该是独立的,所以我在每次测试开始时重置数据库。
我无法使用RESTORE,因为架构的某些部分(我无法控制)正在缓存连接,并且会在下次调用时因连接丢失而失败。
现在我正在创建一个快照,然后在每个表上调用DELETE+INSERT以将数据与快照同步。但是,每次重置需要 1 秒,这太多了(150 次测试 = 150 秒)。我有很多桌子,但它们几乎是空的,所以没有理由让它这么慢。
那么如何在不丢失连接的情况下在不到 1 秒的时间内用以前的版本替换数据库呢?
我的下一个想法是添加某种更改跟踪,因为每个测试只影响一些表,但这会使重置代码更加复杂。
更新:我添加了SET STATISTICS TIME ON,我得到了
SQL Server parse and compile time:
CPU time = 327 ms, elapsed time = 343 ms.
Run Code Online (Sandbox Code Playgroud)
对于我的重置 SP。我认为这是由于ALTER TABLE ... NOCHECK CONSTRAINT ALLSP 开始时的调用。我想知道在这种情况下是否可以抑制重新编译。
我理解它是如何工作的,但是我正在学习的这本书并没有告诉我你为什么要分区。有人可以解释一下吗?除非我看到它是如何有用的,否则我无法理解任何概念。
我的公司希望有大约 100 名销售人员(分布在全国各地)能够从 excel 运行存储过程并将数据返回到电子表格中。
我们有 sql server 2008。我需要找出一种安全的方法来做到这一点。
我将在 excel 中创建一个表单,用户可以在其中按下命令按钮以根据他们选择的参数刷新数据。
我发现这是非常好的信息:http : //office.microsoft.com/en-us/excel-help/connect-to-import-sql-server-data-HA010217956.aspx
Windows 身份验证 选择此选项以使用当前用户的 Windows 用户名和密码。这是最安全的方法,但当许多用户连接到服务器时,它会影响性能。
但是,我希望您对此提出意见。
是的,销售代表确实有 Windows 登录,但是如果他们实际上要输入指定数据标准,然后将标准发送到存储过程,然后从服务器获取数据,我可以使用这个解决方案吗?
我有一个(.Net 控制台应用程序)EXE,它使用带有适当凭据的 SQL 服务器身份验证连接到各种 SQL 数据库。现在需要在 EXE 中进行更改才能使用 Windows 身份验证并使用网络凭据登录 SQL 服务器。(所有 SQL 服务器都在不同的位置)我有网络凭据,但我很困惑如何使用这些连接到远程 SQL 服务器并从中检索数据。请帮忙。
是否有在 SQL Server 2008 中配置维护计划的最佳实践?目前,我正在删除超过 40 小时的数据库备份和事务日志,然后进行备份。我看到的问题是事务日志仍然非常大。我应该包括收缩数据库计划任务吗?
sql-server-2008 sql-server transaction-log maintenance-plans
当我查看我的查询计划时,我看到大量聚集索引搜索(是的!)和扫描(不是那么好!),但在其中一些order = False。我会提到我们涉及并行性,尽管它似乎与这些没有任何关系。索引是按顺序设置的。
这是什么意思?查询计划忽略了这个顺序?或者查询选择不订购?或者……哎呀,我不知道我在看什么……!
我们有两个数据库表ErrorLog,Audit并且在过去几年中都变得相当大。所以为了减少数据库的大小,我必须编写一个脚本来清除这两个表中所有超过 6 个月的行。
这就是我想出的:
ALTER DATABASE StudioWebTest SET RECOVERY SIMPLE;
DELETE FROM [Audit] WHERE AuditDate < DATEADD(M, -6, GETDATE());
DELETE FROM [ErrorLog] WHERE ErrorDate < DATEADD(M, -6, GETDATE());
ALTER DATABASE StudioWebTest SET RECOVERY FULL;
Run Code Online (Sandbox Code Playgroud)
在我的开发机器 (SQL Server 2008 R2) 上,无论是否更改恢复模式,数据库大小都会增长 2-3 倍。但是,如果我立即使用收缩命令进行跟踪,它会将数据库的大小减少到原始大小的一半(在删除记录之前)。
但是,如果我推迟几天进行收缩,收缩几乎没有那么有效,因为虽然数据库大小减少了,但它仍然几乎是原来大小的两倍(在删除记录之前)。不太了解 SQL Server 如何使用它分配的空间,我认为这与使用已释放的额外空间有关。
除了一件事,这一切都可以。当我们在使用 SQL Server 2005 的生产测试环境中运行它时,shrink 命令不会将数据库的大小减少到原始大小的一半。
作为替代方案,我也尝试使用TRUNCATE代替,DELETE但这似乎没有太大区别。语句完成后数据库仍然大量增长,我仍然必须缩小它以获得相同的结果。我们还没有在生产测试机器上尝试过这个,但是因为shrink 命令似乎没有削减它,所以这是否会产生任何改进似乎值得怀疑。
无论如何,我只是想知道是否有人可以解释为什么尽管更改了错误恢复设置,数据库还是增长了这么多?如何防止这种情况发生?或者,如果这不是解决此问题的最佳方法,则可能建议减少数据库大小的替代方法。
更新:
我只是使用TRUNCATE它进行了更多测试,现在似乎没有增加大小(也许是我想象的)。我仍然需要缩小数据库以查看整体大小的减少。我可能会在生产测试服务器上尝试这个。归根结底,只要规模缩小到一定程度,我的经理就会很高兴。
问题:我正在将以下查询(按外键依赖项列出表)移植到 PostGreSql。
WITH Fkeys AS (
SELECT DISTINCT
OnTable = OnTable.name
,AgainstTable = AgainstTable.name
FROM sysforeignkeys fk
INNER JOIN sysobjects onTable
ON fk.fkeyid = onTable.id
INNER JOIN sysobjects againstTable
ON fk.rkeyid = againstTable.id
WHERE 1=1
AND AgainstTable.TYPE = 'U'
AND OnTable.TYPE = 'U'
-- ignore self joins; they cause an infinite recursion
AND OnTable.Name <> AgainstTable.Name
)
,MyData AS (
SELECT
OnTable = o.name
,AgainstTable = FKeys.againstTable
FROM sys.objects o
LEFT JOIN FKeys
ON o.name = FKeys.onTable
WHERE (1=1)
AND …Run Code Online (Sandbox Code Playgroud) 我对带有 FILESTREAM 的表上的 ROWGUID 列的要求感到困惑。这个专栏将如何使用?
如果我在同一个表上使用不同的主键(聚集),同时让该 ROWGUID 列“就在那里”而没有聚集索引,是否可以?
像这样:
CREATE TABLE Sample
{
-- This is going to be clustered
[Id] int NOT NULL,
-- What shall I do with it index-wise?
[RowGuid] uniqueidentifier ROWGUIDCOL NOT NULL UNIQUE
}
Run Code Online (Sandbox Code Playgroud) 我的数据库非常大,并且以每天约 2000 万行的速度增长。我有很重要的时间戳数据,但大多数报告都是基于日期范围和周与周或月与月的比较。时间偶尔会显示在结果集中,但从未用作标准。鉴于此,我想我会通过单独的日期索引与组合的日期时间字段来节省大量的存储空间。我不确定我是否也会在我的选择中看到性能提升,或者拆分为 2 个字段是否有任何缺点。
sql-server-2008 ×10
sql-server ×6
performance ×2
c# ×1
datatypes ×1
optimization ×1
security ×1
windows ×1