数据库管理员

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


3
在SQL Server中查找新的跟踪标志的方法
那里有很多跟踪标志。有些文档有据可查,有些则没有,而另一些在2016版本中已找到默认行为状态。除了官方支持渠道,Microsoft员工等以外,还有什么方法可以找到新的跟踪标志? 我在这里和这里都阅读了Aaron Bertrand最近的几篇文章,但没有发现有关新的Trace Flags的任何信息。 我将mssqlsystemresource的数据和日志文件复制到一个新位置,并将其像常规数据库一样附加到系统表和视图中,但没有立即发现任何东西。我考虑过列出一个已知的跟踪标志列表,并循环访问该列表中未列出的数字,以查看DBCC TRACEON允许使用哪些标志,但是我想先在这里提出问题。 假设启用它们的DBCC命令必须使用一些资源进行检入以确保跟踪标志有效,那么该跟踪标志可以到达何处?是否存在包含列表的.dll或其他系统文件? 我知道这个问题产生了广泛的影响,但是,这促使人们阅读有关具有特定预期行为的跟踪标志以及2016年的新功能(未达到上述效果)的情况。我最初的想法是,数字可能会以某种方式进行转置,例如7129变成7219。我希望获得一个在7000-7999范围内的有效跟踪标志的列表,以查找排列。将它们作为DBCC TRACEON标志和启动参数进行全部测试,并结合针对功能特性的结果进行测试非常麻烦。

3
什么时候创建统计信息而不是创建索引更好?
我发现了很多有关什么 的信息STATISTICS:如何维护它们,如何从查询或索引手动或自动创建它们,等等。但是,我无法找到有关何时使用的任何指导或“最佳做法”信息创建它们:在什么情况下,手动创建的STATISTICS对象比从Index中受益更多。我已经看到了手动创建的筛选统计信息,可以帮助对分区表进行查询(因为为索引创建的统计信息涵盖整个表,而不是每个分区-太小了!),但是肯定还有其他情况可以从统计对象中受益不需要索引的详细信息,也不需要花费维护索引或增加阻塞/死锁机会的成本。 @JonathanFite在评论中提到索引和统计数据之间的区别: 索引将通过创建与表本身排序不同的查找来帮助SQL更快地找到数据。统计信息可帮助SQL确定满足查询所需的内存/工作量。 那是个很棒的信息,主要是因为它可以帮助我阐明我的问题: 如何知道这(或在任何其他技术信息什么 S和如何 S的相关的行为和性质STATISTICS)帮助确定何时选择CREATE STATISTICS在CREATE INDEX创建索引将创建相关的时候,尤其是STATISTICS对象?仅具有统计信息而不具有索引会更好地服务于哪种情况? 如有可能,提供一个工作场景示例,说明该STATISTICS对象比物体更合适,这对超级骗子很有帮助INDEX。 因为我是一个视觉学习者/思想家,所以我认为并排查看es STATISTICS和INDEXes 之间的差异可能会有所帮助,这是帮助确定何时STATISTICS是更好选择的一种可能方法。 Thingy PROs CONs ------- ---------- ------------------- INDEX * Can help sorts. * Takes up space. * Contains data (can * Needs to be maintained (extra I/O). "cover" a query). * More chances for blocking / dead-locks. …

2
错误:尚未选择要在其中创建的架构
我正在一个Amazon RDS postgresql数据库上工作,在该数据库中我知道公共架构存在一些问题(也许已删除)。但是显然该模式存在,并且无论如何问题都没有解决。这是使用新创建的空数据库的示例会话: mydb=> CREATE TABLE distributors ( mydb(> did integer, mydb(> name varchar(40) UNIQUE mydb(> ); ERROR: no schema has been selected to create in mydb=> show search_path; search_path ---------------- "$user",public (1 row) mydb=> create schema public; ERROR: schema "public" already exists 有什么提示吗?我应该找什么? 解决了。 感谢DanielVérité的回答,我已经解决了以下问题: grant usage on schema …

6
Management Studio System.OutOfMemoryException
我正在使用Microsoft SQL Server 2012,并尝试在Management Studio中对其执行简单查询。我收到以下错误(在SSMS中,在服务器上运行): 执行批处理时发生错误。错误消息是:引发类型'System.OutOfMemoryException'的异常。 系统已安装24GB RAM,但在任务管理器中查找sql​​servr.exe进程仅使用2.9GB。 是否存在某个设置会限制其RAM使用率?

1
数据库的简单或完整恢复模型?
什么时候应该使用完整恢复模型,什么时候应该对数据库使用简单恢复模型? 我一直使用完整恢复模式,因为它是默认模式,但今天我遇到了此错误: SQL Server的Microsoft OLE DB提供程序(0x80040E14)数据库'数据库名称'的事务日志已满。要找出为什么无法重用日志中的空间的原因,请参阅sys.databases中的log_reuse_wait_desc列 特定的数据库实际上是服务器上最小,最不活动的数据库之一,因此我不知道该数据库上的日志如何充满,而不是其他数据库。 为了缩小日志并使数据库可再次访问,我使用以下命令将恢复模型从FULL更改为SIMPLE并缩小了逻辑文件日志 alter database myDbName SET recovery simple go dbcc shrinkfile('LOG FILE LOGICAL NAME', 100) go 它帮助,但现在我需要了解为什么它的帮助下,如何这种情况开始,如何防止这种情况在未来? 编辑: 每天晚上1点,我们都会对服务器上的每个数据库进行脚本化备份。这是由31行脚本完成的,其中最重要的部分是 set @Filename = 'D:\backup\' + convert(varchar, getDate(), 112) + ' - ' + @DBName + '.bak' set @Description = 'Full backup of database ' + …

3
数据库设计:新表与新列
(建议将其从StackOverflow重新发布在此处) 当前有一个表..,需要开始向其中添加新的数据列。并非每条记录(甚至在添加新数据列之后使用新数据)都将具有数据。所以我想知道这是否更适合新表,因为它实际上是某些数据行的扩展,并且不适用于每一行。 换句话说,由于这些新数据元素将有许多未使用的列,因此,这似乎更适合于新表? 第一个表是页面浏览量的记录(当前有200万条记录) - ID - IP地址 -浏览次数 -时间戳创建时间 -日期 对于每个IP地址,每天进行一次记录-并将连续的网页浏览量添加到每天的浏览量中 其他字段将用于原点跟踪(即Google Analytics(分析)来源/媒介/广告系列) 并非每次访问都会获得该信息。我会假设大约10%的行将包含数据(因为通常仅在首次访问时才归因于该数据) 数据的主要用途是归因于人来自何处。这可能会被更频繁地使用(然后似乎使自己适合单个表) 欣赏反馈-如果需要,可以添加更多

3
在9.1下是否仍建议使用常规VACUUM ANALYZE?
我在Ubuntu上使用PostgreSQL 9.1。是否VACUUM ANALYZE仍建议使用预定时间,还是自动真空足以满足所有需求? 如果答案是“取决于”,则: 我的数据库比较大(压缩的转储大小为30 GiB,数据目录为200 GiB) 我将ETL输入数据库,每周导入近300万行 更改最频繁的表都从主表继承,主表中没有数据(数据按周划分) 我创建每小时汇总,并从那里创建每日,每周和每月报告 我要问的是因为计划安排VACUUM ANALYZE正在影响我的报告。它运行了5个多小时,本周我不得不杀死它两次,因为它影响了常规数据库的导入。check_postgres不会报告数据库有任何重大膨胀,所以这并不是真正的问题。 从文档中,autovacuum还应注意事务ID的回绕。问题是:我还需要一个VACUUM ANALYZE吗?
38 postgresql  etl  vacuum 

2
多核和MySQL性能
RAM的重要性已被确​​定,但是关于MySQL使用CPU时,关于内核和多线程的重要性的资料很少。我说的是在4cores,6cores和8cores等上运行MySQL的区别。 不同的存储引擎对CPU的使用是否不同?


1
MySQL Connections休眠的时间“太长”?
我登录到服务器以检查数据库的状态,并注意到SHOW PROCESSLIST;存在大量非常老的休眠连接。 在终止连接之前,连接时间限制应持续多长时间? 如何在MySQL 5.0.51a-3ubuntu5.4中设置时间限制? 注意: 我正在使用PHP 5.2.x和symfony框架1.2。
38 mysql  mysql-5 


6
如何在PostgreSQL中使用VALUES创建临时表
我正在学习PostgreSQL,并试图弄清楚如何创建一个临时表或WITH声明来代替常规表,以进行调试。 我查看了CREATE TABLE的文档,它说VALUES可以用作查询,但没有给出示例。VALUES其中链接的子句的文档也没有示例吗? 因此,我编写了一个简单的测试,如下所示: DROP TABLE IF EXISTS lookup; CREATE TEMP TABLE lookup ( key integer, val numeric ) AS VALUES (0,-99999), (1,100); 但是PostgreSQL(9.3)抱怨 “ AS”处或附近的语法错误 我的问题是: 我该如何修正以上陈述? 我如何适应它的使用WITH block? 提前致谢。

4
ALLOW_SNAPSHOT_ISOLATION和READ_COMMITTED_SNAPSHOT
大部分的论坛和榜样的网上总是建议同时拥有ALLOW_SNAPSHOT_ISOLATION并READ_COMMITTED_SNAPSHOT设置为ON,每当别人问快照,行版本或类似的问题。 我猜这两种设置中的SNAPSHOT这个词都会让人有些困惑。我认为,为了使数据库引擎使用行版本控制而不是READ_COMMITTED默认行为的锁定,无论使用什么设置,数据库READ_COMMITTED_SNAPSHOT都设置为ON 。ALLOW_SNAPSHOT_ISOLATION 该ALLOW_SNAPSHOT_ISOLATION设定被设定为ON只允许快照隔离启动事务(例如SET TRANSACTION ISOLATION级快照)时无论的READ_COMMITTED_SNAPSHOT设置。 将这两个设置设置为ON的唯一原因是当它需要具有READ COMMITTED行版本控制和 快照隔离功能时。 我的问题是,我的理解在某种程度上不正确吗?并且这两个设置必须始终一起设置为ON(特别是对于READ COMMITTED行版本控制)?

3
为什么此查询有效?
我有两个表,table_a(标识,名称)和table_b(标识),在Oracle 12c中说。 为什么此查询不返回异常? select * from table_a where name in (select name from table_b); 据我了解,Oracle认为这是 select * from table_a where name = name; 但是我不明白为什么呢?

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.