我尝试编写数据库代码以确保它不受竞争条件的影响,以确保我锁定了正确的行或表。但我经常想:我的代码正确吗?是否有可能强制任何现有的竞争条件出现?我想确保如果它们确实发生在生产环境中,我的应用程序会做正确的事情。
我通常确切地知道哪个并发查询可能会导致问题,但我不知道如何强制它们并发运行以查看是否发生了正确的行为(例如,我使用了正确类型的锁),正确的错误是抛出等。
注意:我使用 PostgreSQL 和 Perl,所以如果这不能被一般地回答,它可能应该被重新标记。
更新:如果解决方案是程序化的,我更喜欢它。这样我就可以编写自动化测试来确保没有回归。
很多次我在软件开发工作结束时被引入并被告知“好吧,我们已经有了所有这些新代码,它需要更改表并迁移数据”。
似乎每次都是一次性的,从臀部射门,最好的猜测场景。我觉得这是我作为 DBA 最弱的技能。
我想了解一些接近、管理和测试数据迁移的模式。
请告诉我一些最佳实践和/或我可以从哪里获得学习材料以帮助我在这方面做得更好。
我希望能够生成bytea
任意长度(<1Gb)的随机字段来填充测试数据。
这样做的最佳方法是什么?
我是 DBA 新手,我有使用 Microsoft SQL Server 的经验,但我想跳到 FLOSS。
我正在创办一家公司,我们开发了一个带有 Postgres 后端的应用程序 (PHP),我们也做了一些与 MySQL 进行比较的测试。我们观察到 MySQL 的速度是 PostgreSQL 的两倍。
我做了一个有形的性能测试:
我究竟做错了什么?
PS:我阅读了许多关于数据库引擎性能调优的“howtos”。
PS(2):我们在 MySQL 数据库上使用 InnoDB(每个表一个文件)。
嗨垫!
我做了三个常见的选择(和最难的)查询。
关于磁盘的问题,当然不一样;在 Postgres 中,它是一个 SSD(快了几乎三倍)。
MySQL缓存数据:
+------------------------------+----------------------+
| Variable_name | Value |
+------------------------------+----------------------+
| binlog_cache_size | 32768 |
| have_query_cache | YES |
| key_cache_age_threshold | 300 |
| key_cache_block_size | 1024 |
| key_cache_division_limit | 100 |
| max_binlog_cache_size | 18446744073709547520 |
| query_cache_limit | …
Run Code Online (Sandbox Code Playgroud) 我正在寻找(最好是免费的、开源的)数据屏蔽工具。有这样的存在吗?
注意:这个相关问题涉及用于生成测试数据的工具,但在这个问题中,我更感兴趣的是从真实数据开始,并在不丢失任何特殊关系的情况下将其屏蔽以用于测试,而不会丢失任何使其对测试目的感兴趣的特殊关系。生成的数据适用于某些测试目的,但现实世界的数据会带来您从未想过的问题。 生成大型测试数据集的工具
从我的另一个问题中可以看出,生成测试数据是我现在的主题。
在这一点上,我仍在手动生成我的测试数据。但是,此过程始终会生成少量数据(通常为 5-10 行),因为它是一个手动过程。
是否有任何工具可以自动执行此过程?特别是,我希望能够生成 100 万行以上。
我有一个电子邮件应用程序,它将被要求在每个页面加载时将给定用户的新消息数量传送到 UI。我在数据库级别上测试了一些变化,但所有内容都由存储的 proc 调用抽象。
我试图猛击数据库以查看断点(每秒请求数)是什么。
简而言之,我有一个表,比如这个 userId、newMsgCount,在 userId 上有一个聚集索引。SQL 应该能够每秒处理成百上千个这样的响应。我认为落后者是我的 .NET 应用程序。
我怎样才能使这个测试成为一个很好的测试来实现基于 SQL 性能的测试结果?
有没有一个工具,我可以给它一个存储的过程名称和参数,以便它打我的数据库?
我想看看数据库是否可以返回分钟。每秒 250 个响应。
performance sql-server testing scalability performance-testing
是否有任何时候您对您的语言/数据库/系统变得如此熟悉,以至于无需测试新功能/配置/查询/等。在您的系统中实施之前通过包含/模拟测试(特别是关于修改数据的功能)?还是在测试环境中通过模拟来测试新查询总是必不可少的?
进一步说明,很明显,测试总是最安全的。但是,有没有一种方法可以确定何时风险如此之小以至于测试不值得付出努力?另一种表述方式:何时或曾经是专业的实践来承担风险来实现一个功能?
此外,让我们假设所有内容都已备份,因此,在最坏的情况下,数据可能通过一些努力来恢复数据。
有人可以引用具体的专家经验来解决这个问题吗?请在适当/可能的情况下包括参考文献。
我正在向我的 IT 部门提议一个数据库暂存环境。这个想法是像我这样的非 IT 人员(公共工程数据分析师)可以有一个地方来测试解决方案,然后自己在实际环境中实施它们,或者在需要时要求 IT 实施它们。这种环境有益于以下几个原因/场景:
create table
,create view
等等)。我大约每周更改一次架构,但在实时环境中测试和实施这些更改对我来说似乎很疯狂。对数据库的依赖数不胜数,因此如果出现问题,可能是灾难性的。我更愿意在单独的环境中提前测试。create trigger
或create function
在实时数据库中。这很好,但我确实有一些可以通过触发器和/或函数解决的问题。我计划提议在临时环境中授予我这些权限,以便我可以开发和测试一些想法,如果它们有效,则建议 IT 在实时环境中实施它们。“非 IT 人员的临时环境”对我来说似乎是一个足够好的方法,但老实说,我只是提出了这个想法。我不知道这在 IT/数据库世界中通常是如何完成的。
是否有适合这种情况的既定 IT/数据库实践?(在为非 IT 人员提议数据库暂存环境时,我是否走在正确的轨道上?)
我有一个测试数据库,我定期从 SQL Server 2008 R2 中的生产备份文件中恢复该数据库以获取新数据。与生产的存储过程相比,我们经常编辑\更改或更新测试数据库中的存储过程来测试数据!
是否只刷新\恢复表而不是存储过程?所以我不必将它们重新编辑回我需要的更改?
这两个数据库(生产和测试)都在一台服务器上。
我的数据库大小约为 5 GB,我们负担不起第三方工具。
testing ×10
sql-server ×3
mysql ×2
performance ×2
postgresql ×2
backup ×1
bytea ×1
concurrency ×1
features ×1
learning ×1
linux ×1
migration ×1
oracle ×1
permissions ×1
random ×1
replication ×1
restore ×1
scalability ×1