数据库管理员

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

1
如何(安全地)终止MongoDB中长期运行的操作?
有时,操作会在MongoDB中失控,最终可能会运行数百秒,并影响性能,直到操作被终止或完成。 发生这种情况时,我知道我killOp()有空,但是我如何只杀死目标的长时间运行的操作而又不杀死(例如)复制中涉及的长时间运行的操作(这很危险)?

2
用来自另一个表的数据更新列
我正在研究复杂的问题,但是我将简化为这个问题。 我有两张桌子 A [ID, column1, column2, column3] B [ID, column1, column2, column3, column4] 我想更新第三个: C [ID, column1, column2,column3] 我正在使用此查询更新另一个第三张表。 UPDATE C set column1=t.firstTab, column2=t.secondTab, column3=t.thirdTab from (select A.column1 as firstTab, B.column2 as secTab, (A.column1 + B.column2) thirdTab from A, B limit 1; ) as t ; 我有: UPDATE 0 当我运行此查询时: …

3
SELECT和GROUP BY子句中的SQL计算字段
通常在查询我的MS SQL Server数据库时,我需要创建一个计算字段,例如 (CASE WHEN A.type = 'Workover' THEN 'Workover' ELSE (CASE WHEN substring(C.category, 2, 1) = 'D' THEN 'Drilling' WHEN substring(C.category, 2, 1) = 'C' THEN 'Completion' WHEN substring(C.category, 2, 1) = 'W' THEN 'Workover' ELSE 'Other' END) END) 然后我需要按此计算字段(除其他外)对结果分组。因此,我在SELECT和GROUP BY子句中都进行了相同的计算。SQL Server是实际上执行两次这些计算,还是仅执行一次就足够聪明?
11 sql-server 

2
如何删除空表
是否可以从庞大的数据库(mysql)中删除所有空表? 我正在寻找一个sql命令来自动删除所有这些空表。 当前,我的数据集中有305个表,其中约30%是旧的空表,这些表将不会在新应用程序中使用。 只是为了澄清;所有表的类型为= MyISAM
11 mysql  myisam 

4
无法远程访问在Mac OS X上运行的MySQL服务器
我的工作计算机上运行的是MySQL服务器,该计算机运行Mac OS X Maverick。我想从家用计算机(也有Mac OS Maverick)访问它。 从终端,如果在1选项卡中,我SSH进入我的工作计算机,并且只让ssh会话坐在那里而不空闲,那么在另一个选项卡中,我可以访问MySQL服务器。 但是,如果不运行ssh会话,则会出现以下错误 错误2003(HY000):无法连接到“ SERVER_IP_ADDRESS”上的MySQL服务器(60) 我试图my.cnf通过注释掉绑定地址或将其分配给服务器来修改服务器上的文件,0.0.0.0但是它不起作用。 为什么会这样呢?如何配置服务器,使其无需在客户端上运行ssh即可进行远程访问?有人可以帮忙吗?

4
SQL Server上的CPU使用率高-查询速度慢
这个问题不太可能对将来的访客有所帮助;它仅与较小的地理区域,特定的时间段或极为狭窄的情况(通常不适用于Internet的全球受众)有关。要获得使该问题更广泛适用的帮助,请访问帮助中心。 6年前关闭。 我们的MS SQL Server使用了大约95%的CPU能力。 重新启动服务器(硬件)或重新启动SQL-Service后,使用率为0%,并且在1-3天的过程中缓慢增加。取决于使用了多少。 当超过80%时,每个查询都会非常慢。 我们的网站正在处理大量重大查询,因此其中一些需要45-60秒。重新启动后(CPU使用率低于80%),相同的查询需要11到20秒的时间。 我怎样才能解决这个问题?我已经在线阅读了亲和力掩码可以调整CPU使用率的信息,但亲和力设置已禁用。我不能改变他们。这是因为我只有1个处理器吗? 与查询本身有关的技巧很多,但我们的网站和服务相当庞大,而且变化太多。 它们中的大多数已经非常优化。 即使只花了2秒钟,我也无法继续重启SQL服务,因为我们有一个警报服务,允许人们拨入并记录一条消息,然后将呼叫选定的组并听到记录的消息。 数百个Search and Rescue团队都使用此系统,如果SQL-Service在警报期间重新启动,它将终止,并且不会通知调用它的人员。 我搜索了整个地方,但是除了“亲和力面具”以外,什么都找不到,我无法更改。 必须有一种在不终止当前查询的情况下清除CPU缓存的方法...对吗? SQL: Microsoft SQL Server 11.0.2100.60 OS: Windows Server 2012 x64 Processor: 2.30 GHz RAM: 4.00 GB

2
如何在MySQL中为具有NULL值的列设计索引?
我有一个拥有4000万个条目的数据库,并希望使用以下WHERE子句运行查询 ... WHERE `POP1` IS NOT NULL && `VT`='ABC' && (`SOURCE`='HOME') && (`alt` RLIKE '^[AaCcGgTt]$') && (`ref` RLIKE '^[AaCcGgTt]$') && (`AA` RLIKE '^[AaCcGgTt]$') && (`ref` = `AA` || `alt` = `AA`) LIMIT 10 ; POP1是一个浮点列,也可以为NULL。POP1 IS NOT NULL应该排除大约50%的条目,这就是为什么我将其放在开头。所有其他术语仅会稍微减少该数字。 除其他外,我设计了一个index pop1_vt_source,它似乎没有使用,而使用了索引vt为第一列的索引。解释输出: | id | select_type | table | type | possible_keys …
11 mysql  index 


3
新服务器上的性能更差
我们一直在使用专用服务器(单四核,6 GB RAM),并且正在迁移到新的专用服务器(2x六核,32 GB RAM)。两者都是Windows Server 2008,SQL Server2008。新服务器的性能比旧的慢服务器稍差。 在测试中,我们的ASP.NET应用程序的运行速度降低了10%-20%。使用STATISTICS IO和STATISTICS TIME运行单个昂贵的查询将显示在新服务器上的运行时间增加了10-20%。SQL查询配置文件在昂贵的查询中显示较高的CPU使用率。 新服务器上的任务管理器显示sqlserver.exe正在消耗22 GB的RAM,但CPU值始终保持很低。 我已经更新了所有统计信息,重建或重新组织了索引等。鉴于我已完成的测试量,执行计划此时应存储在新服务器上。如果有任何缺失的索引(我认为没有),它们会同等地影响新旧服务器。新的具有与旧的相同数据的还原备份。 我曾希望新服务器上的性能会更好,但是负载更值得关注。如果旧服务器即使在负载下也表现更好,那么当新的,性能稍差的服务器必须承担该负载时会发生什么? 我还能在这里错过什么? 编辑:MAXDOP设置为6。 旧服务器在相同的物理驱动器(RAID 10)上具有操作系统,数据库和tempdb。总共4个15k 3 Gb / s 3.5英寸SAS。新服务器具有三个驱动器集:RAID 1上的OS,RAID 10上的数据库,RAID 5上的tempdb。总共9个15K 6 Gb / s 2.5英寸SAS。 旧服务器具有1 x Intel Xeon E5620 2.40 GHz四核8线程(w H / T)。新服务器具有2个Intel Xeon E5-2640 2.5 GHz六核12线程(w H / T)。 编辑2:这是最终分析: …

2
为什么禁用聚集索引会使表不可访问?
禁用索引后,定义保留在系统目录中,但不再使用。SQL Server不维护索引(当表中的数据更改时),并且该索引不能用于满足查询。如果禁用了聚集索引,则整个表将无法访问。 为什么不能直接从丢弃B树的表中访问数据?(最有可能通过逐行扫描表)是否比使数据完全不可访问更合适? 这是一个纯粹的理论问题-我绝对不会这样做。这不是一个场景,也不是一个要做的事情,我只是想知道事情为什么这样发展,将其视为内部问题。

4
我可以确保两列的值不相同吗
如果我有一个像这样的桌子 CREATE TABLE foo ( id INT NOT NULL AUTO_INCREMENT, aa INT NOT NULL, bb INT NOT NULL, PRIMARY KEY (id), UNIQUE KEY (aa, bb), CONSTRAINT aa_ref FOREIGN KEY (aa) REFERENCES bar (id), CONSTRAINT bb_ref FOREIGN KEY (bb) REFERENCES bar (id) ) aa != bb除了使用应用程序级逻辑或强制触发器在插入前失败之外,是否有其他方法可以确保?
11 mysql-5.1 

2
LATCH_EX等待资源METADATA_SEQUENCE_GENERATOR
我们有一个生成库存报告的过程。在客户端,该过程拆分可配置数量的工作线程,以为报告构建大量数据,这些数据对应于许多商店(可能是数千个,通常是几十个)中的一个商店。每个工作线程都调用一个执行存储过程的Web服务。 用于处理每个块的数据库过程将一堆数据收集到#Temporary表中。在每个处理块的末尾,数据将被写入tempdb中的永久表。最后,在该过程结束时,客户端上的一个线程从永久tempdb表中请求所有数据。 运行此报告的用户越多,获取速度就越慢。我分析了数据库中的活动。在某一时刻,我看到35个单独的请求在流程的某一时刻全部被阻塞。所有这些SPID LATCH_EX在资源上的类型等待时间约为50 ms METADATA_SEQUENCE_GENERATOR (00000010E13CA1A8)。一个SPID拥有此资源,而其他所有SPID都被阻止。我没有在网络搜索中找到有关此等待资源的任何信息。 我们正在使用的tempdb中的表确实有一IDENTITY(1,1)列。这些SPID是否正在等待IDENTITY列?我们可以使用什么方法来减少或消除阻塞? 该服务器是集群的一部分。该服务器在64位Windows 2008 R2 Enterprise上运行64位SQL Server 2012 Standard Edition SP1。该服务器具有64 GB RAM和48个处理器,但是该数据库是标准版本,因此只能使用16个。 (请注意,我对在tempdb中使用永久表来保存所有这些数据的设计并不感到兴奋。对此进行更改将是一个有趣的技术和政治挑战,但我愿意接受建议。) 更新4/23/2013 我们已经与Microsoft开立了支持案例。随着我们了解更多信息,我将不断更新此问题。 更新5/10/2013 SQL Server支持工程师同意等待是由IDENTITY列引起的。删除IDENTITY消除了等待。我们无法在SQL 2008 R2上重复该问题;它仅发生在SQL 2012上。

2
为什么我们不能将ddl语句直接写入PL / SQL块
为什么我们不能直接在PL / SQL块中编写ddl语句,例如当我编写时 CREATE OR REPLACE PROCEDURE test IS BEGIN truncate table table_name; // error END test; / 但, CREATE OR REPLACE PROCEDURE test IS BEGIN execute immediate 'truncate table table_name'; // works fine END test; / 为什么第二个成功执行?
11 oracle  plsql  ddl 

2
架构更改会“破坏”可用性组,还是透明处理?
我的组织计划采用SQL Server 2012可用性组,并且我试图了解它将对我们的应用程序升级过程产生什么影响(如果有)。 我们每8周发布一次应用程序更新,任何发布都可能包含架构更改和/或数据迁移。 我想了解的是HA / DR解决方案是否透明地处理架构更改(新列,索引添加到第二级),还是在每个实例上创建架构然后重新打开Always On所需的手动干预。 我假设的数据迁移部分是透明处理的,但也想确认一下。 我想我也在做出一个笼统的假设,即基于可用性组配置的这些行为也没有差异,这可能也是错误的。请告诉我。 简而言之; 在我的应用程序的任何给定发行版中,我都可以通过向表中添加列来更改非常大的表(10s至1亿亿条记录)。一些列可能是“ net new”的,因此它们可以利用企业在线模式更改功能。其他列可能是对现有列的重构(FullName被拆分为FirstName和LastName),并且将对表中的每一行运行迁移以填充这些字段。这些行为是否需要DBA更改AlwaysOn配置,或者默认情况下会进行处理,并且所有辅助节点都“免费”获得DDL和DML语句? 感谢您的澄清。


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.