我发现我的大多数客户根本没有记录他们的数据库,我觉得这很可怕。为了介绍一些更好的实践,我想知道人们正在使用哪些工具/流程。
我不是在谈论逆向工程/记录现有数据库,而是主要讨论开发系统/数据库时的文档最佳实践。
MSDN 文档很难理解。
是否有任何可用于学习 SQL Profiler 的在线教程?如果可能,视频或简单的博客文章将是首选。
我刚刚看到这个函数定义:
create function dbo.f (@a int, @b int)
returns integer
as
begin
return case when
not exists (Select * from t1 where t1.col1 = @a)
AND @b > 0
then 1 else 0 end
end
GO
Run Code Online (Sandbox Code Playgroud)
看到一个不存在我想注意全表扫描并尝试改进它
create function dbo.f (@a int, @b int)
returns integer
as
begin
return case when
exists (Select * from t1 where t1.col1 = @a)
OR @b > 0
then 0 else 1 end
end
GO
Run Code Online (Sandbox Code Playgroud)
我的感觉是,这种转换可以由优化器来完成。看起来很简单,但我如何确定他是否这样做呢?
对伊戈尔的回答发表评论:( 由于马茨的评论而修复了比较)
这给我带来以下启发:
create …Run Code Online (Sandbox Code Playgroud) 如果我在 mysql 数据库上拥有 root 权限,并且想将权限降至普通用户的权限,而不使用他们的密码,我可以这样做吗?如果是这样怎么办?想想# su - usernameunix。基本上,我只是想避免让他们的密码成为他们,这样我就可以测试他们对用户的权限。在 postgres 中,我可以简单地允许对系统 root 用户进行身份验证,以绕过密码验证。我需要这样做的原因是能够通过成为他们来重现用户问题,而不是他们将无法准确重现。我当然可以要求他们提供密码,但这比绕过密码需要更多时间。
我们有一个使用 Microsoft SQL 数据库的现成应用程序。在这个应用程序中,我们为每个报告挑选和选择各种选择标准。此应用程序然后运行这些报告。
我相信我们有一个查询计划问题。我们每天运行的第一个报表,运行速度非常快 7 分钟。我们在第一个报告之后运行的任何报告都需要一个多小时。
每天晚上,我们都会运行一个计划任务来停止和启动 SQL Server 代理和 SQL Server。在这个 SQL Server 实例中还有大约 25 个其他数据库。没有其他数据库有性能问题,只有我之前提到的现成产品。
有没有办法清除 SQL Server 当前内存中的所有查询计划?
如何在不影响依赖同一服务器上其他数据库的 30 个左右的用户的情况下执行此操作?
我一直在与一个团队合作,他们建立了一个系统,他们在这个过程中创造了一些新术语,我想知道他们是否应该称之为更标准化的东西。
基本上,他们有保存版本信息的表,所以表的唯一键是被跟踪文档的标识符,加上记录号(尽管记录号是自动编号的,所以它本身是唯一的)。它们将构成文档标识符的字段(它因每个表而变化)称为“主键”......唯一标识符,他们可能互换指为“一个首要键”和A / B / C为“的首要键”
如果他们有一个规范化的数据库,这将是外键的明显候选者——但它没有规范化,所以它不是对不同表的引用。
这个概念有什么名字——一个标识符来选择一些不是表所基于的概念,但不是外键?
更新:它不是备用键,因为它不标识表中的唯一记录;它标识一组记录。看下表:
id document_id version_no
-- ----------- ----------
1 1 1
2 2 1
3 1 2
4 2 2
5 2 3
Run Code Online (Sandbox Code Playgroud)
因此,我们正在跟踪 5 个对象的元数据,它们是两个不同的文件,其中一个已更新一次(它的 2 个版本/版本),另一个已更新两次。
我们有以下几点:
...如果document_id是与另一个表的关系,它将是一个外键,但“外键”通常也推断出一个约束(即,该值必须存在于其他某个表中才能在此处使用).. . 但在这种情况下,它不是。那么,是否有其他术语可以将其描述为从表中选择相关对象分组而不是单个记录?
维基百科页面上代理键适合的第一个定义,但这不是该术语的常见用法,大多数人认为代理键适合第二个定义:
更新 2:基本上,如果您有一个处理记录版本控制的表,如果您将记录移动到新表并存储编辑历史记录,则链接回原始表的字段将被视为外键……但是如果您将所有内容都存储在一个表中,而与辅助表无关,是否有标识记录多个版本的字段组的名称?
我问的原因是与我一起工作的小组决定称其为“主键”,当我加入时,我查看了他们的所有文档,并告诉他们他们有一个错字,这是'primary key',但他们解释说不,这是他们创造的用来描述这个概念的短语。 …
由于所有写入和顺序读取均由EMC 存储系统缓存,因此固态磁盘的最佳用途是存储具有随机读取模式的数据。在 Oracle 上,这是用于无法放入内存的磁盘排序的临时表空间。如何隔离以随机磁盘读取模式为特征的 MySQL 部分?
这里澄清了我的原始问题:这是一个具有非常大的表、大量排序等的报告数据库。无法放入服务器内存中。
我正在考虑为我的数据库设置主从复制。从服务器将用于冗余和可能的报告服务器。但是,我遇到的最大问题之一是我们的数据中心已经用尽了电源。因此,添加另一台物理服务器不是一种选择。
就 CPU 而言,我们现有的数据库服务器的利用率相当低(四核上的平均负载从未真正超过 1)。所以主要的想法是放入一些新驱动器并将内存加倍(从 8GB 到 16),并在同一台物理机器上运行第二个 mysql 实例。每个实例都有单独的数据库磁盘。
这个想法有什么问题吗?
编辑(更多信息):我(幸运的是)从来没有发生过任何足以关闭服务器的事情,但我正在努力提前计划。我们当然有可以从中恢复的每晚备份。但我认为,如果主服务器的驱动器出现故障(如果整台机器出现故障,显然不会),将冗余数据放在单独的磁盘上会提供更快的解决方案。
至于报告方面,我们要报告的任何表都是 MyIsam。因此,在正在写入的同一表上进行昂贵的读取可能会使服务器陷入困境。我的假设是,只要我们在主服务器上投入足够的 RAM(因为 cpu 负载还不是问题),有一个要报告的从服务器就不会影响主服务器。
如果可以的话,有什么理由(性能/稳定性)我不应该这样做?
学习如何操作和管理 MongoDB的最佳资源是什么?
有很多资源可以针对它进行开发 - 当您拥有足够的开发能力并且确实需要过滤掉这些噪音时,这实际上会产生问题。对于还没有能力聘请 DBA 的开发人员,我们需要在保持我们的 Mongo 集群稳定、高性能等方面做得相当好。除了常见问题解答和快速入门指南之外,还有其他好的信息存储库吗?值得关注的好博客等?
mysql ×4
performance ×3
sql-server ×3
concurrency ×1
index ×1
learning ×1
mongodb ×1
myisam ×1
permissions ×1
profiler ×1
query ×1
replication ×1
storage ×1
terminology ×1