当我为存储过程编写单元测试时,它们通常如下所示:
/* Unit test for stored procedure which runs a query */
/* Define #temp table with structure of query results */
/* Define and set variables for stored procedure parameters */
/* If stored procedure queries from a particular table...*/
/* Truncate table and populate with sample data */
/* Call stored procedure using variables but insert results into table */
/* INSERT #temp EXEC usp_TestProc @P1=1, @P2 = 'X' */
/* Query #temp table to confirm that all …
Run Code Online (Sandbox Code Playgroud) 现在,我们通过提取最新的备份文件并将其恢复到测试数据库,每月测试一次 SQL 备份。如果 SQL Server 说恢复成功,我们会抽查一些表以确保其中有数据。
如果 SQL Server 说恢复完全成功,那么假设恢复完全成功是否安全?有没有好的方法来验证恢复的数据/索引/等是否正确?
编写包含数据库的集成测试是一个常见问题。如果测试更改了数据库,那么它可能会影响其他测试或下一次运行。
我知道我可以将我的测试包装在一个事务中并在测试运行后回滚该事务。但是如果 PostgreSQL 能够提供某种全局快照或一次性覆盖,那就太好了。在理想情况下,这样的功能将涵盖数据库的所有状态,包括模式和存储过程。
不是 DBA 家族的纯血统成员,但更像是一个开发团队,我发现自己试图找出一些运行缓慢的查询。
然而,我的问题的主题不是“为什么我的查询很慢”,而是想知道 MySql 中的“LIMIT”命令是如何工作的。
目前,我仍在尝试对服务器性能本身进行故障排除,因此作为一种给它一些 SQL 来咀嚼的方法(只是为了让它做一些工作),我正在使用以下内容:
SELECT * FROM <table> LIMIT 10
Run Code Online (Sandbox Code Playgroud)
我正在使用的表是一个实时表,其中有超过 50Mil 的行,并且由于我目前只进行测试,我的期望是这将返回表顶部的前 10 条记录,并且很容易在 10 分钟内完成。
然而...
我看到这个 SQL 在 30 分钟或更长时间后仍在运行,并且似乎没有做任何事情。
我想特别澄清的是:
MySql 是否尝试从数据库中获取整个表然后才返回前 10 行
或者
MySql 是否在接收行时获取行并在计算收到 10 行后停止
干杯美女
不确定这个问题是否属于这里,但我希望有人能帮助我。
我已经对数据库进行了集成测试(使用 mssql localDB)。我希望每个测试都使用它自己的数据独立运行 - 我想在每个测试运行之前用我的假数据重新植入数据库。我试图用事务来实现它,但没有成功。这是我尝试将其关闭的方法:
public class TestDbInitializer : DropCreateAlways<MyContext>()
{
public static List<Item> Items;
public override Seed(DbContext context)
{
Items = new List<Item>();
// Adding items
// ..
Items.ForEach(x => context.Add(x));
context.SaveChanges();
}
}
public class BaseTransactionsTests
{
private TransactionScope _scope
[TestInitialize]
public void Initialize()
{
_scope = new TransactionScope();
}
[TestCleanup]
public void Cleanup()
{
_scope.Dispose();
}
}
[TestClass]
public class IntegrationTests : BaseTransactionsTests
private IDependenciesContainer _container;
public static void AssemblyInit(TestContext context)
{
Database.SetInitializer(new TestDbInitializer());
_container = …
Run Code Online (Sandbox Code Playgroud) 当我第一次运行查询时,执行需要 x 毫秒。当我第二次运行它时,它花费的时间要少得多。我假设这个机制涉及一些缓存,但我需要知道我的查询的真实速度是多少。
顺便说一句,我在 Windows (XAMPP) 中使用 Apache、MySQL 和 PHP。
是否有一种经济的方法可以在测试服务器上许可 SQL Server 标准版?
鉴于以下环境:
这种情况的问题在于,开发人员可以使用在开发人员版本中工作的功能进行编码,但在部署到实时服务器时不可用。客户将是第一个发现问题的人!
想法:
我想要做的是安排将数据从我的生产数据库复制到我的开发/测试数据库。
开发/测试数据库在架构方面将比生产数据库更新,但生产数据库具有当前数据。我有点困惑,因为我需要针对生产规模数据测试我的数据库更改,拥有当前数据会非常有帮助。
我在 SQL Server 2008 R2 Standard 上用于生产和开发环境;有没有一种方法可以在我的开发服务器上创建一个作业,以只读方式从我的生产数据库中“吸取”数据?我想要一个脚本,可以批量复制表数据,忽略丢失的列并忽略目标表中的任何约束。一个为一张表执行此操作的脚本是我真正需要的,我可以修改它以适合我的表并复制它以运行我的所有表。我遇到的问题是发现任何与此类似的东西。
这是对我最后一个相同性质的问题的跟进;从那以后,我将我的数据库纳入了源代码管理,而且我更喜欢它。问题是我的开发服务器上仍然面临陈旧的数据问题,所以我想找到一种安排更新的方法。
我愿意采用其他方法来实现这一点,但它必须是我可以按计划运行的东西,并且我可以使用记事本和/或 SSMS 或标准版 SQL Server 提供的其他工具构建。
我需要知道是否有任何方法可以故意破坏 PostgreSQL 中的索引。
我找了很久,但从未见过有人提到过这样的行为。
我想在单独的服务器上设置一个测试数据库。生产数据库是 MS SQL Server,测试服务器是 *nix 机器,所以我想让测试服务器运行 PostgreSQL 或 MySQL。
数据集非常大;有些表有 30k+ 行,并且有很多表。
一些表根本没有太大变化,并且出于测试目的,许多表可以是空的,因此理想情况下,某种可以从数据库复制部分但不是全部记录的解决方案将是理想的。
除此之外,我可能只是在同一台服务器上制作生产数据库的测试副本,而不是将测试数据库服务器放在开发服务器上。假设测试数据库上的负载相对较小,在与生产服务器相同的服务器上托管测试数据库是否存在潜在问题?
如果我从生产环境复制 - > 在 MS SQL Server 中进行测试,是否可以设置某种自动化脚本来选择性地仅复制某些记录(例如,仅某些表中的最后 1k 行,而其他表中没有,以及选定的几行中的所有行)?有没有办法将其设置为选择性备份,然后使用该备份生成测试数据库?
这里测试的只是代码,而不是数据库,甚至不是数据库的接口。代码 (Django) 使用 ORM,因此使用哪个 RDBMS 并不重要。我很乐意假设,如果我调用.save()
它,无论数据库如何,它都可以工作;我担心的是我是否正确设置了表单、实用程序函数、数据导入等,所有这些都是通过 Django 的关系模型系统抽象出来的,该系统已被证明对 RDBMS 完全无动于衷(实际上,在一个的生产版本中)我的网站同时从 MySQL 和 SQL Server 数据库中提取(一个包含旧数据)。
testing ×10
sql-server ×5
mysql ×3
postgresql ×3
unit-test ×2
backup ×1
c# ×1
development ×1
index ×1
index-tuning ×1
integration ×1
license ×1
performance ×1
php ×1
query ×1
recovery ×1
restore ×1
snapshot ×1
windows ×1