数据库管理员

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

2
改用ARITHABORT ON的风险
我正在与一家供应商合作,安排他们提供核心应用程序,只要不修改核心应用程序,我就可以构建自己的扩展。它内置在ColdFusion中,可连接到SQL Server 2005数据库。 我构建的某些报告依赖于使用从核心表计算出的函数的视图,并且随着表的增大,报告变得非常慢。为了加快报告速度,我想使用索引视图。但是,在我的测试环境中创建了索引视图之后,核心应用程序无法再插入到核心表中(它返回了一条错误消息,这ARITHABORT是ON使用索引视图时所必需的)。 因此,似乎为了使用索引视图,SET ARITHABORT ON每当插入/更新核心表时,我都需要拥有核心应用程序。我在测试环境中运行了此命令: ALTER DATABASE MyDatabase SET ARITHABORT ON; 而且似乎工作正常。但是我的供应商说,由于应用程序具有成千上万的查询,因此该设置可能会中断其中一个查询,并且如果将来出现一些意外的数据库问题,他们会坚持要求我恢复默认设置。 是否有实际的查询会被打破SET ARITHABORT ON?在任何情况下都最好保留它OFF? TL; DR为了使新的索引视图生效,我需要ARITHABORT ON为整个数据库进行设置,但是我的供应商警告说,这将由我自己承担风险。实际上有风险吗?

2
如何在单用户模式下删除数据库
如何删除显示DatabaseName (Single User)为名称的数据库? 当我尝试将其删除时,出现以下错误: 更改数据库“ DatabaseName”失败。(Microsoft.SqlServer.Smo) ALTER DATABASE语句失败。(Microsoft SQL Server,错误:5064) 我尝试执行ALTER以下命令,但仍然遇到相同的问题。 ALTER DATABASE [DatabaseName] SET MULTI_USER WITH NO_WAIT


1
为什么默认的character_set_server是latin1?
我正在使用MySQL 5.5,当我显示有关字符集的变量时,我有 +--------------------------+----------------------------+ | Variable_name | Value | +--------------------------+----------------------------+ | character_set_client | utf8 | | character_set_connection | utf8 | | character_set_database | latin1 | | character_set_filesystem | binary | | character_set_results | utf8 | | character_set_server | latin1 | | character_set_system | utf8 | | character_sets_dir | /usr/share/mysql/charsets/ | +--------------------------+----------------------------+ …


1
Oracle数据库中的提交与快速提交与提交清除
我想知道是否有人可以验证我对这三个术语与Oracle数据库之间的区别的理解。 许多消息来源混淆了这些术语,并且没有详细解释它们,因此查找信息有些困难。 从我的收集: 提交和快速提交是完全一样的东西,所有提交都是快速提交。 快速提交实质上仅更新撤消/回滚段头的事务表中的标志,以指示事务已提交。但是,实际块未重新访问,这意味着位于数据块头中的感兴趣的事务列表(ITL)中的撤消字节地址(UBA)仍指向相应撤消段的事务表。此外,不释放相应行的锁定字节,并且ITL中的锁定计数不变(行仍被锁定)。 在提交清除中,将重新访问该块,并使用提交SCN更新ITL。但是,ITL中的锁计数和每行存储的锁字节仍未更新(行仍然像快速提交中一样被锁),即使更改了块也不会生成重做。 正常提交(==快速提交)的块将在下次触摸(并生成重做)时进行延迟块清除。 进行了提交清除的块将在下次被触摸(并生成重做)时进行延迟日志记录块清除。 希望有人可以验证这些观点!谢谢!

2
使用复杂条件最小化索引读取
我正在优化工作票的Firebird 2.5数据库。它们存储在这样声明的表中: CREATE TABLE TICKETS ( TICKET_ID id PRIMARY KEY, JOB_ID id, ACTION_ID id, STATUS str256 DEFAULT 'Pending' ); 我通常想查找尚未处理的第一张票证并且处于Pending状态。 我的处理循环将是: 取回第一张票 Pending 使用票务。 更新故障单状态=> Complete 重复。 没什么好看的。如果在此循环运行时正在观察数据库,则可以看到每次迭代的索引读取次数都在增加。据我所知,性能似乎并没有显着下降,但是我正在测试的机器很快。但是,我从一些用户那里收到了性能随时间下降的报告。 我在上有一个索引Status,但看起来仍然像它在Ticket_Id每次迭代时向下扫描列。似乎我正在忽略某些内容,但是我不确定是什么。是这种预期的索引读取数目攀升,还是索引行为异常? -编辑评论- 在Firebird中,您可以限制行检索,例如: Select First 1 Job_ID, Ticket_Id From Tickets Where Status = 'Pending' 因此,当我说“第一”时,我只是在询问它在哪里的有限记录集Status = 'Pending'。

2
innodb_flush_method = O_DIRECT与O_DSYNC性能对具有LVM磁盘分区的ext3的影响
在我的一个生产环境中,我们有两个实例在RedHat集群上运行,并且一个生产实例与该集群相关联。 我们有125G主内存,instance1占用了24G InnoDB缓冲池,instance2占用了12G,这与RedHat集群无关。数据日志和事务日志都位于带有ext3文件系统的LVM磁盘分区上。 为了提高性能和提高I / O吞吐量,我决定更改innodb_flush_method为O_DIRECT。 参考MySQL文档: InnoDB数据和日志文件位于SAN上的位置,已发现将设置innodb_flush_method为O_DIRECT可以使简单SELECT语句的性能降低三倍。 提到高性能MySQL Ver 2和3,它指出InnoDB开发人员使用发现了错误innodb_flush_method=O_DSYNC。O_SYNC并且O_DSYNC类似于fsync()和fdatasync():O_SYNC同步数据和元数据,而O_DSYNC仅同步数据。 如果所有这些看起来都像是在没有任何建议的情况下进行很多解释,则以下是建议: 如果您使用类似Unix的操作系统,并且您的RAID控制器具有备用电池的写缓存,则建议您使用O_DIRECT。如果不是,则默认设置或O_DIRECT将是最佳选择,具体取决于您的应用程序。 谷歌搜索,我得到这个基准测试报告:在O_DSYNCVSO_DIRECT 基准报告: =================== 1B行复杂事务测试,64个线程 * SAN O_DIRECT:读/写请求:31560140(每秒8766.61个) * SAN O_DSYNC:读/写请求:5179457(每秒1438.52) * SAN fdatasync:读/写请求:9445774(每秒2623.66) *本地磁盘O_DIRECT:读/写请求:3258595(每秒905.06) *本地磁盘O_DSYNC:读/写请求:3494632(每秒970.65) *本地磁盘fdatasync:读/写请求:4223757(每秒1173.04。 但是,O_DIRECT禁用OS级别的缓存,可以禁用双重缓存,这会显示出更好的I / O吞吐量。 O_DIRECT而不是一起去O_DSYNC好吗?这两个选项有些令人困惑。哪个选项可以显示出更好的I / O吞吐量并增强性能,而不会对数据,读/写(特别是在生产中)产生任何影响?根据您的个人经验有更好的建议吗? 我可以在帖子中看到Rolando Update : 这两个参数仍然有些混乱。在可以看到大多数使用的生产配置模板的地方O_DIRECT,没有任何推荐的地方O_DSYNC。 系统 MySQL 5.1.51-enterprise-gpl-pro-log 红帽企业Linux服务器5.5版 具有Raid Controller的DELL DRAC,具有电池写回缓存512MB Dell PERC控制器H700带有备用电池(BBU)。 附加信息 mysql>显示类似'innodb_thread_concurrency'的变量; …

1
大内存环境中的SQL Server TempDB行为
阅读这个问题使我想起了我前一段时间遇到的一个问题。 我们有一个具有512GB RAM的SQL Server,主数据库是450 GB。我们在TempDB中看到了很多动作(好吧,我认为这是“很多动作”-可能不是!)。我安装了演示版的RamDisk Plus服务器,创建了一个50GB的ramdrive,将其指向TempDB,并且根本看不到性能的提高。 是对TempDB的写入始终导致对磁盘的实际物理写入,还是由SQL Server缓存TempDB的写入以像Windows文件系统缓存一样延迟写入? 在这种情况下,虚拟磁盘毫无意义吗? 我知道SQL Server 6.5支持对TempDB-In-Ram,但很久以前就停止了它!

1
镜像-无法访问服务器网络地址
我已经安装了SQL Server 2008 R2。它包含三个实例。 默认(MSSQLServer) 第一个例子 第二审 所有这些都是作为网络服务登录。 默认实例是主体服务器,第一个实例是镜像,第二个实例是见证服务器 最初,我对主体数据库进行了完整备份和事务日志备份。通过保持相同的数据库名称将其还原到第一个实例,并且恢复状态为“不可恢复” 最后,我启动了镜像,并收到以下两条错误消息。

2
为什么此查询不使用我的非聚集索引,我该如何进行查询?
在跟进有关提高查询性能的这个问题之后,我想知道是否有一种方法可以使我的索引默认使用。 该查询运行大约2.5秒: SELECT TOP 1000 * FROM [CIA_WIZ].[dbo].[Heartbeats] WHERE [DateEntered] BETWEEN '2011-08-30' and '2011-08-31'; 这大约需要33毫秒: SELECT TOP 1000 * FROM [CIA_WIZ].[dbo].[Heartbeats] WHERE [DateEntered] BETWEEN '2011-08-30' and '2011-08-31' ORDER BY [DateEntered], [DeviceID]; [ID]字段(pk)上有一个聚集索引,[DateEntered],[DeviceID]上没有聚集索引。第一个查询使用聚集索引,第二个查询使用我的非聚集索引。我的问题分为两个部分: 为什么,由于两个查询在[DateEntered]字段上都有WHERE子句,服务器为什么在第一个而不是第二个上使用聚集索引? 即使没有orderby,如何使该查询默认使用非聚集索引?(或者为什么我不想要那种行为?)

2
将事务日志放置在单​​独的卷[固态]上?
事务日志通常隔离在单独的卷上。据我了解,这种做法的基本原理是事务日志的数据是按顺序写入的-硬盘驱动器可以按顺序执行写入操作,而随机执行则要快得多。这是由于驱动器内部的小针在写入顺序数据块时必须移动短得多的距离,这与随机写入相反。 (很抱歉,您的幼稚的解释。只是想使我所读的内容有意义。) 考虑到这一点……在我看来,固态驱动器几乎没有针头,盘片和东西在内部移动。如果我的数据库和事务日志都位于八个固态驱动器的单个RAID 5上,那么将事务日志移到其自己的单独卷上真的有任何好处吗?如果假定的效率提升是基于顺序写入的前提,即减小了针移动和盘旋转的距离,而固态驱动器没有这些移动部分,那么通过隔离日志我可以获得什么?

4
为何在Oracle中不使用可为空的数字?
我们的公司正在与另一个软件公司进行联合项目,有人告诉我们,如果不应显示特定值,则应传递-5000(它们的任意哨兵值);原因是在Oracle数据库(现在是以前的Oracle开发人员)的建议下,Oracle数据库中没有number列支持空值。该公司还用VB6编写了他们的绝大多数代码(慢慢地过渡到VB.NET,这是另一天的话题...)。出于纯粹的好奇心,此建议是否有任何正当理由?我想不起我这边。 -编辑 感谢您的反馈。我在CodeProject.com(链接)上提出了相同的问题,并收到了非常相似的反馈。似乎唯一可以证明这种做法正确的时间与外键有关,我可以说它们在系统中的任何地方都不使用外键。做出此决定的开发人员(我曾经在该公司工作)比我拥有更多的经验,因此我想确保在发生嘲笑之前没有正当的理由。

3
在一个列上选择DISTINCT,同时返回其他列?
我有一个查询,该查询使用三个查找表来获取我需要的所有信息。我需要DISTINCT为一列提供值,但是我还需要与之关联的其余数据。 我的SQL代码: SELECT acss_lookup.ID AS acss_lookupID, acss_lookup.product_lookupID AS acssproduct_lookupID, acss_lookup.region_lookupID AS acssregion_lookupID, acss_lookup.document_lookupID AS acssdocument_lookupID, product.ID AS product_ID, product.parent_productID AS productparent_product_ID, product.label AS product_label, product.displayheading AS product_displayheading, product.displayorder AS product_displayorder, product.display AS product_display, product.ignorenewupdate AS product_ignorenewupdate, product.directlink AS product_directlink, product.directlinkURL AS product_directlinkURL, product.shortdescription AS product_shortdescription, product.logo AS product_logo, product.thumbnail AS …


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.