数据库管理员

希望提高数据库技能并向社区中的其他人学习的数据库专业人员的问答

2
PostgreSQL:对表的最后访问时间
我负责一个大型的PostgreSQL数据库,只有几十个表。我怀疑其中许多表从未访问过。 检查上次访问某个表的时间的最佳方法是什么?我想加入一个触发的DELETE,INSERT和UPDATE,但我希望有一个更有效的方法。
10 postgresql 

4
Oracle对DBA的要求比SQL Server高吗?[关闭]
已关闭。这个问题是基于观点的。它当前不接受答案。 想改善这个问题吗?更新问题,以便通过编辑此帖子以事实和引用的形式回答。 6年前关闭。 我一点都不了解Oracle,但是我听过Oracle DBA的说法,即与使用SQL Server相比,与Oracle(作为DBA)一起工作更“困难”,更加困难且要求更高。这个陈述有根据吗?

5
确定PostgreSQL数据库的最新更改时间
我正在查看如何更改备份方式,并且想知道是否有一种方法可以确定postgreql集群中的哪些数据库最近没有更改? 我不想使用pg_dumpall,而是想使用pg_dump并仅转储自上次备份以来已更改的数据库(某些数据库不会经常更新),其想法是,如果没有任何更改,则当前备份应还是不错。 有谁知道一种确定特定数据库上次更新/更改时间的方法? 谢谢... 更新: 我希望不必在所有地方编写触发器,因为我无法控制一个特定集群中数据库的创建(更不用说在数据库中创建db对象了)。 进一步挖掘,似乎$ PGDATA / global / pg_database文件的内容(特别是第二个字段)与$ PGDATA / base下的目录名称之间存在关联。 一路走来,我猜想pg_database文件的第二个字段是数据库oid,每个数据库在$ PGDATA / base下都有自己的子目录(子目录名带有oid)。那是对的吗?如果是这样,将$ PGDATA / base / *下文件中的文件时间戳用作触发备份是否合理? ...或者,还有更好的方法? 再次感谢...

2
您可以在SQL Server实例上查看哪些性能计数器来确定其性能以及所有运行状况?
我是埃因霍温丰提斯大学的一名学生,我目前正在进行一系列访谈,以帮助开发SQL Server工具,并且我希望获得该领域专家的反馈。 我的问题之一是: 您可以在SQL Server实例上查看哪些性能计数器以确定其性能和总体运行状况? 特别是当好转坏时,我对阈值感兴趣。 贾米尔·扬·埃因霍温荷兰

3
查询问题:只能有一个自动列
有人可以告诉我此表定义有什么问题吗? mysql版本是5.1.52-log root@localhost spoolrdb> create table spoolqueue ( queue int, idx bigint not null auto_increment, status smallint, querystring varchar(2048), contenttype varchar(255), characterencoding varchar(16), body text, primary key(queue,idx) ); ERROR 1075 (42000): Incorrect table definition; there can be only one auto column and it must be defined as a key
10 mysql  query 

3
如何在mysql中最佳实现最近邻居搜索?
简而言之, 纬度和经度的数据类型应该是什么? 例如,我应该调用哪个SQL命令来获取前100个最近的餐馆? 详情: 我有10万张biz记录,分别包含经度和纬度。我看到MySQL实际上支持一种称为point的数据类型。我应该改用它吗? MySQL是否支持KDTree存储系统http://en.wikipedia.org/wiki/File:KDTree-animation.gif 最好是使用点数据类型而不是常规浮点数据类型来存储纬度和经度? 最终,我想查找例如最接近点105,6的前100家餐厅,而我的数据库包含很多biz和点。显然,对每个记录和每个点一一计算距离将是O(n),因此很糟糕。 请注意,我知道如何像Yelp这样的应用程序中描述的更简单的解决方案,可以有效地从数据库检索距离信息,并且一开始也将实现我的自我。这是一个很好的答案。 但是,我认为最好的答案应该是超越该权利吗?实际上,基于纬度和经度存储位置并查找距离它最近的东西是一个非常普遍的问题,我希望mysql为此具有特殊的设计模式。有吗? 在哪里可以了解更多信息?谢谢。
10 mysql 


1
SQL Server 2008R2中的自动更新统计信息:尽管有大量的行插入,为什么有些统计信息仍然过时?
在调查慢速查询期间,似乎执行计划异常次优(一个嵌套循环执行900万次搜索执行,估计执行次数为1)。确认一些实际过时的相关统计数据后,我重新构建了统计数据,并且性能问题得到了有效解决。 此数据库已启用“自动更新统计信息”(默认情况下处于启用状态)。我了解根据20%+ 500行修改(更新/插入/删除)存在自动统计信息更新的阈值。在多个索引上似乎已大大超过了此阈值,因此似乎存在(A)自动更新问题或(B)更新策略的内容超出了我在网上能找到的范围文档。 我很欣赏可以设置一个计划任务来更新统计信息,如果找不到其他解决方案,这很可能是我们采用的方法,但是对于如此大量的修改为何不会触发更新,这确实使我们感到困惑。自动更新某些统计信息-了解为什么可以帮助我们确定计划任务需要更新哪些统计信息。 一些附加说明: 1)在数据库中发现了问题,该数据库中的数据是通过负载测试创建的,因此在短时间内添加了大量数据,因此,如果定期进行自动更新(例如,每天一次)大部分),则可以解释一些观察到的行为。另外,我们的负载测试往往会对数据库造成很大的压力,因此我想知道SQL是否会在负载很重的情况下推迟统计信息更新(由于某种原因随后不更新统计信息)。 2)在尝试使用包含连续的INSERT,SELECT和DELETE语句的测试脚本来重新创建此问题时,没有发生该问题。我想知道这里的区别是否在于这些语句每个都会影响每个SQL语句许多行,而我们的负载测试脚本将倾向于单独插入行。 3)有问题的数据库设置为“简单”恢复模型。 一些相关链接: 分析慢速运行查询的清单 使用统计信息来提高查询性能 我还通过Microsoft Connect提出了此问题: 自动更新统计信息:许多统计信息仍然过时 更新2011-06-30: 在进一步调查中,我认为超出阈值水平(例如500行+ 20%)的统计信息是问题查询未使用的统计信息,因此在运行查询时可能会对其进行更新。需要他们。对于查询所使用的统计信息,这些统计信息会定期更新。然后剩下的问题是,这些统计信息在仅插入了相对较少的插入次数之后(例如,导致上述900万次查找估计数量为1的情况),就严重误导了查询计划优化器。 我此时的直觉是,问题与主键选择不当有关,该键是使用NEWID()创建的唯一标识符,因此这会很快创建高度碎片化的索引-特别是作为SQL中的默认填充因子服务器是100%。我的直觉是,在相对较少的行插入之后,这会以某种方式导致统计数据产生误导-小于重新计算统计数据的阈值。这可能完全不是问题,因为我已经生成了很多数据而没有完全重建索​​引,因此,糟糕的统计信息可能是由于产生的非常高的索引碎片所致。我认为我需要将SQL Server维护周期添加到我的负载测试中,以更好地了解真实系统在长时间内的性能。 2012年1月10日更新: 要考虑的另一个因素。SQL Server 2005中添加了两个跟踪标志(2008年似乎仍然存在),以解决与过时和/或误导性统计信息的发生有关的特定缺陷。有问题的标志是: DBCC TRACEON(2389) DBCC TRACEON(2390) MSDN:Ian Jose的WebLog:升序键和升序列上的自动快速更正统计信息 统计信息,Fabiano Amorim 当然,在决定启用这些标志时应该非常小心,因为它们可能会产生不利影响。

2
我可以无损地分解这张桌子吗?
我偶然发现了一个数据库设计问题,而这个数据库设计问题超出了我的能力范围,而我的DBA专家也开始进行防火训练。 本质上,我有一个带有以下主键的表(为简洁起见,PK): child_id integer parent_id integer date datetime child_id并且parent_id是实体表的外键。“子”表本身还包含“父”表的外键,并且lo child_id始终引用与parent_id上表所期望的相同的外键。实际上,事实证明,还有一些额外的代码可以使两者保持同步。 这使这位热情洋溢的标准化新手说:“我应该删除冗余!” 我分解为以下内容: Table_1 PK: child_id integer date datetime Table_2 PK: parent_id integer date datetime Table_3: (already exists) child_id integer PRIMARY KEY parent_id integer FOREIGN KEY 而且,当我自然地将这些人加入一起时,我将恢复原始表。据我了解,制造出了5NF。 但是,现在我意识到存在隐藏的业务规则。 通常,与给定日期关联的日期child_id必须是与对应日期关联的日期的子集parent_id。您可以看到第一个表强制执行此规则。 我的分解不会强制执行该规则,因为您可以自由地将其添加到表1中,直到日期变得太大为止。 这将我引向以下问题: 这是5NF分解吗?虽然我说它允许插入异常,但它似乎也遵循Wiki示例,该示例本身遵循本指南。短语(强调我)“我们可以从由三种不同的记录类型组成的规范化形式中重构所有真实事实”,这给了我一个特殊的停顿,因为无论我注入多少垃圾Table_1,自然连接仍然会忽略它。 假设我不喜欢这种分解(我不喜欢)。我自由地承认,实际的解决方案是保留表和代码不变。但是,从理论上讲,是否有一种方法可以分解和/或添加约束,以使我摆脱第一个表并保留我的业务规则?


2
限制重做以实例化视图完全刷新或手动等效
物化视图(MV)日志可用于允许MV执行快速刷新,该刷新仅修改已更改的数据。但是,各种情况都会阻止MV使用日志,因此需要完全刷新。Oracle实现了原子的完全刷新,作为每个记录的删除和插入。即使最终数据没有变化,它也会这样做。 有没有办法使这种复制在重做生成方面变得智能化?合并后跟删除要求将源查询两次。批量收集数据进行批量合并和删除是否值得?有没有更好的办法? 更新: 我探索了使用全局临时表作为暂存区。尽管他们使用的重做少于一半,但仍然使用很多。


2
MySQL 5.1 InnoDB配置/ 24GB RAM-双至强高负载
我正在运行一个Facebook应用程序,该应用程序目前有300-600个并发用户(并且还在不断增长)。为了使硬件为增长做好准备,我将i7 / 12gb ram / 2x 80g intel x25 ssd(debian 5.0 / mysql 5.0 / 64bit)更改为bi-xeon / 24gb ram / 2x 120gb intel 320 ssd(ubuntu 10.10 / mysql 5.1 / 64位)。 现在我面临的问题是,性能要比“小盒子”差。在两台服务器上,我一直在使用nginx / php fcgi来提供内容。 我只使用innodb,读/写大约65%/ 35%。大约800-1000 qps,但是所有查询都很简单,永远不会加入超过1个额外的表。所有索引均已设置,并且慢速日志(> 2s)中不会记录任何查询。目前,我大约有400mb的数据(带索引的数据约为1gb),期望它每月增加一倍。 我很喜欢每个可以给我一个提示的人,告诉他们应该进行哪些更改以使其运行更加流畅。 i7机顶盒上的旧配置是这样的(混合myisam / innodb),最多可容纳800多个用户。 旧的my.cnf key_buffer = 3000M max_allowed_packet = 128M …

3
安全永久删除数据库的最佳实践是什么?
我们有一个“有机”的环境,这意味着人们在最少的监督或文档的情况下将代码堆积在代码上已有十年。我使用的服务器有几个我认为不再使用的数据库。我很想删除它们,只留下我实际使用的三个。 在极端鲁extreme的极端情况下,我可以禁用这些数据库并等待有人尖叫。在其他情况下,我可以让它们永远运行以防万一。您发现哪些步骤对确定服务器是否正在使用有价值,以及如何使用? 此外,您建议采取什么步骤来确保在禁用系统中不断发展,并在一段时间内保持可逆性(例如,重命名对象而不是直接删除它们)? 谢谢!


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.