数据库管理员

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

2
聚集索引和非聚集索引之间的性能差异
此问题是从Stack Overflow 迁移而来的,因为可以在Database Administrators Stack Exchange上回答。 迁移 7年前。 我正在阅读Clustered和Non Clustered Indexes。 Clustered Index-它包含数据页。这意味着完整的行信息将出现在“聚簇索引”列中。 Non Clustered Index-它仅包含“聚簇索引”列(如果可用)或“文件标识符+页码+页面中的总行数”形式的行定位器信息。这意味着查询引擎必须采取其他步骤才能找到实际数据。 查询 -如何检查的性能差异与实际例子的帮助,因为我们知道,表只能有一个Clustered Index,并且提供sorting在Clustered Index Column和Non Clustered Index不提供sorting,可支持999 Non Clustered Indexes中SQL Server 2008,并在249 SQL Server 2005。

2
什么会导致镜像会话超时然后故障转移?
我们有两个运行SQL Server 2005 SP4且具有累积更新3的生产SQL Server。这两个服务器都在相同的物理计算机上运行。DELL PowerEdge R815具有4个12核心CPU和512GB(yes GB)的ram,以及用于所有SQL数据库和日志的10GB iSCSI SAN连接的驱动器。操作系统是带有所有SP和Windows更新的Microsoft Windows Server 2008 R2企业版。操作系统驱动器是3个72GB 2.5英寸15k SAS驱动器的RAID 5阵列。SAN是具有48个10k SAS 3.5英寸驱动器的Dell EqualLogic 6510,在RAID 50中进行配置,分割为两个SQL Server的多个LUN,并且也共享一台Exchange机器和几台VMWare服务器。 我们有20多个数据库,其中有11个使用见证服务器以高可用性进行了镜像。见证服务器是运行SQL Server实例的低功耗计算机,该实例仅用于提供见证服务。最大的镜像数据库为450GB,可生成约100-300 iops。数据库镜像监视器报告当前的发送速率约为100kb至10mb /秒,并且镜像提交开销(通常为0毫秒)。镜像服务器与主体保持一致没有问题。 我们一直在经历镜像故障转移。有时,单个数据库将进行故障转移,而有时几乎所有数据库将同时进行故障转移。例如,昨晚,我们进行了11个数据库故障转移中的10个,其​​余的数据库保持可访问性,直到我手动对其进行故障转移。 我已经经历了一些故障排除步骤来尝试确定问题,但是到目前为止,仍无法解决问题: 1)该机器随附Broadcom BCM5709C NetXtreme II 4端口千兆网络适配器,我们最初将其用作主要网络连接。此后,我们在两台计算机上都安装了Intel PRO / 1000 PT双端口服务器适配器,以消除NIC的问题。 2)所有数据库每晚都有一个自动完整备份,以及有关镜像数据库的日志备份。日志文件的使用情况受到监控,很少使用超过15%。主数据库的日志文件为125GB,由159个虚拟日志文件组成,大小从511MB到1GB不等。TempDB位于其自己的LUN上,由24 x 2GB文件组成。 3)在见证服务器上的SQL Server登录没有显示以下任何错误:与数据库“ Data”的镜像连接“ TCP://SQL02.DOMAIN.INET:5022”的超时在30秒后没有响应。检查服务和网络连接。 主服务器和辅助服务器上的SQL Server登录显示与镜像有关的消息: 30秒钟后,到“ TCP://SQL01.DOMAIN.INET:5022”的镜像连接超时,数据库“ Data”无响应。检查服务和网络连接。 …

2
Percona与MySQL
什么是Percona? 它与MySQL有何不同? 我们何时应该考虑从现有的MySQL切换到Percona(或升级)? 为了在我们的情况下添加一些细节,我们几乎专门使用InnoDB(据我了解Percona做了很多优化),它具有广泛的外键约束和一些存储过程。 我们目前发现的是MySQL无法优化查询,因此任何超过3-4个联接的查询都必须使用STRAIGHT联接显式构建以提高性能。

3
在大型表上创建聚集索引的无痛方法?
此问题是从Stack Overflow 迁移而来的,因为可以在Database Administrators Stack Exchange上回答。 迁移 7年前。 因此,我们有一个客户站点抱怨性能严重下降。我看了一眼,很明显,问题出在因为Somebody Else(grrrr)设计了一个表,该表包含大约2000万条记录而没有聚簇索引。 现在,我想在该表上创建聚簇索引-但是在我的测试环境中,我的create index命令已经运行了一个小时,但仍未完成。客户站点是一个工作日为24/7的车间,在创建索引时无法承受一个小时的停机时间。 是否有一些不那么费力的方法来创建索引,该索引要么可以快速完成工作,要么以某种聪明的方式完成工作,而这种忙碌的工作不会完全破坏服务器的性能? 我们正在使用SQL Server企业版。

4
将结果限制在前2个排名行中
在SQL Server 2008中,我RANK() OVER (PARTITION BY Col2 ORDER BY Col3 DESC)用来返回带有的数据集RANK。但是我每个分区都有数百条记录,因此我将从1、2、3 ...... 999列中获取值。但我只希望RANKs每个最多2 个PARTITION。 例: ID Name Score Subject 1 Joe 100 Math 2 Jim 99 Math 3 Tim 98 Math 4 Joe 99 History 5 Jim 100 History 6 Tim 89 History 7 Joe 80 Geography 8 Tim 100 …

5
为什么需要定期重启才能保持实例正常运行?
此问题是从Stack Overflow 迁移而来的,因为可以在Database Administrators Stack Exchange上回答。 迁移 7年前。 我们已经在SQL 2005上提供了一个生产数据库服务器。一切正常运行了一段时间,但是几周后,我们发现性能明显下降。仅重新启动SQL Server才能使性能恢复正常。 一些背景: 运行1200多个数据库(大多数是单租户,一些是多租户)。在任何人只讲讲多租户讲座之前,有充分的理由保持这种结构…… RAM是16 GB。重新启动后,SQL Server很快就可以恢复到15 GB的使用率。 活动的数据库连接大约有80个连接-考虑到每个进程每个Web服务器有一个连接池,我们认为这很健康-因此我们没有连接泄漏问题。 我们在非高峰时间尝试了几种方法:-运行DBCC DROPCLEANBUFFERS(带有CHECKPOINT)以清除数据缓存。它无效,也不会清除任何RAM使用情况。-运行FREEPROCCACHE和FREESYSTEMCACHE清除查询计划和存储的proc缓存。没有效果。 显然,在活动的生产环境中重新启动SQL Server是不理想的。我们缺少了一些东西。还有其他人经历吗? 更新:2012年4月28日 仍在解决此问题。我已将SQL Server的内存降低到10 GB,只是为了排除与操作系统的争用。我正在接近缩小范围,但是下一步需要一些帮助。 这是我发现的,重新启动SQL Server之后,页面文件在12.3 GB和12.5 GB之间徘徊。它将保持这种状态数天。服务器线程总数将介于850和930之间-连续几天也稳定且一致(sqlserver取决于流量,稳定在55和85之间)。 然后,有一个“事件”。我不知道事件是什么,我无法在日志中看到它,并且在事件发生的一周中的任何一天或时间都看不到任何一致的信息,但是突然之间,他的页面文件跳到了14.1或14.2。 GB,并且线程数跳到1750和1785之间。 在发生这种情况时检查perfom,其中有900多个线程是sqlserver。所以我去sp_who2看看这些线程是从哪里来的...而且只有大约80个使用过的数据库连接。 所以....有谁知道我如何找到SQL Server上这900个线程的其余位置以及它们在做什么? 更新:2012年6月1日 仍在与问题作斗争。对于仍然阅读此书的人来说,线程跳转的问题已得到解决。这是由自动的ComVault备份软件引起的。它正在创建一个线程,尝试备份不再存在的数据库(它正在维护以前的数据库列表),而不是仅备份当前数据库。 但是-问题仍然存在,我们必须每周重新启动,花几天时间。与Rackspace团队合作,看看他们是否可以阐明任何想法。

4
MySQL错误:用户'a'@'localhost'的访问被拒绝(使用密码:是)
我使用root帐户创建了该帐户'a'@'%'。但是,当指定host参数时,无法使用该帐户连接到MySQL服务器。没有-h参数,我可以成功连接。请参阅下面的成绩单。我希望有人能帮助我解释一下。谢谢。 mysql> grant all on *.* to 'a'@'%' identified by a; ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'a' at line 1 mysql> grant all on *.* to 'a'@'%' …

3
我应该在完整备份期间停止事务日志备份吗?
我有两个计划以不同间隔运行的SQL Agent作业。第一项作业每天运行一次完整备份。第二个作业每十五分钟运行一次事务日志备份。 随着数据库的增长,完全备份花费的时间比最初计划的还要长(即使使用压缩)。而且我从日志中注意到,事务日志备份现在正在同时运行。 我是否应该更改事务日志备份的计划,以便在运行完整备份时不运行该计划?有关系吗?

5
重新启动SQL Server会加快速度吗?
此问题是从Stack Overflow 迁移而来的,因为可以在Database Administrators Stack Exchange上回答。 迁移 8年前。 我注意到一些DBA非常频繁地重新启动SQL Server,有时甚至每晚重新启动一次。我相信他们这样做是为了释放一些内存,或者也可能加快查询速度。我知道重启后必须重新编译查询计划,但是即使包括在内,我也想知道这种做法是否有净收益。 每天重新启动SQL Server会使其运行速度更快吗?

6
检查InnoDB表是否已更改的最快方法
我的应用程序非常耗费数据库。当前,我正在运行MySQL 5.5.19并使用MyISAM,但是我正在迁移到InnoDB。剩下的唯一问题是校验和性能。 我的应用程序CHECKSUM TABLE在高峰时间内每秒执行约500-1000条语句,因为客户端GUI不断轮询数据库以查找更改(它是一个监视系统,因此必须非常敏感且快速)。 使用MyISAM,可以在修改表时预先计算出实时校验和,而且校验和非常快。但是,InnoDB中没有这样的东西。所以,CHECKSUM TABLE非常慢。 我希望能够检查表的最后更新时间,不幸的是,这在InnoDB中也不可用。我被困住了,因为测试表明应用程序的性能急剧下降。 太多的代码行更新了表,因此在应用程序中实现逻辑以记录表更改就成为不可能了。 有什么快速的方法可以检测InnoDB表中的更改?

4
设置varchar(8000)有什么后果?
由于varchar占用的磁盘空间与字段大小成正比,因此是否有任何原因为什么我们不总是将varchar定义为最大值,例如varchar(8000)在SQL Server上? 在创建表上,如果我看到有人在做什么,varchar(100)我应该告诉他们不,你错了,你应该怎么做varchar(8000)?


7
在哪里可以找到有关索引策略的指导?
我们大多数人可能会同意使用数据库索引是好的。太多的索引和性能实际上可能会降低。 通常,应该为哪些字段建立索引? 哪些字段不应该建立索引? 在实现过多索引与不足索引以达到性能提升而不是降级之间的平衡时,使用索引的规则是什么?
22 index 

2
如何重置sa密码?
我在计算机上丢失了sa密码,当我直接使用admin组中的帐户登录计算机时,SQL Server Management Studio将不允许我使用Windows身份验证登录。 我的计划是简单地登录服务器,通过Windows身份验证进行连接,并重置sa以使用新密码。由于我无法通过Windows身份验证进行连接,因此无法正常工作。 我还能如何重设sa密码?

4
从SQL Server 2000开始,“避免基于递增键创建聚簇索引”是神话吗?
我们的数据库由很多表组成,其中大多数表使用整数代理键作为主键。这些主键中大约有一半在标识列上。 数据库开发始于SQL Server 6.0。 从一开始就遵循的规则之一是,避免在这些索引优化技巧中找到基于递增键创建聚簇索引的方法。 现在使用SQL Server 2005和SQL Server 2008,给人留下深刻的印象,那就是情况已经改变。同时,这些主键列是表聚集索引的最佳首选。

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.