数据库管理员

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

1
以最少的停机时间重新导入大量数据的最佳方法
我每周大约需要导入约500,000条包含IP查找(只读参考)数据的记录(仅三个int / bigint cols)。 我真的不想担心将数据与现有表合并,我希望清除旧表并重新导入。 理想情况下,对数据运行的查询将继续运行(我们不会收到很多查询,可以接受的是,在导入期间它们的运行速度会稍慢一些,但需要提高24/7,所以运行此“时间不足”)。 到目前为止尝试过的事情 SSIS:我创建了一个SSIS包,该包会截断表并导入-运行大约需要30秒(实际上太长)。 临时表:导入到临时表中,进行截断和复制也大约需要30秒钟。 BCP:批量导入也相当慢(由于某种原因,它比SSIS慢(即使没有索引需要维护))-我猜想这与char-> int / bigint事务有关:/ 镜子表?所以,此刻,我想知道如何通过视图读取表,将数据导入到镜像表中以及更改视图以指向该表...这似乎会很快,但是看起来很小对我有点 这似乎应该是一个普遍的问题,但我找不到推荐的做法-任何想法将不胜感激! 谢谢

3
使用MySQL定期对100 GB以上的表进行多向联接吗?
背景: 我创建了一个Web应用程序,希望能够合理扩展。我知道我不是Google或Twitter,但是我的应用为每个用户使用了大量的数据,因此对数据的要求很高。我想准备好合理扩展,而不必稍后重新构建所有架构。 我认为自己是软件开发人员,而不是数据库专家。这就是为什么我在这里发布。希望有更多数据库专业知识的人能给我建议。 由于用户数量相对较大,但没有Facebook号码,因此我希望拥有一个如下数据库: 一个“大桌子”: 2.5亿条记录 20列 大约100 GB的数据 具有索引的bigint(20)外键 有一个索引varchar(500)string_id列 有一个int(11)“值”列 其他4个表格: 每一千万条记录 每个约2-4 GB数据 每个表都有4-8列 一栏是datetime date_created 一列是varchar(500)string_id列 每个表中的一或两列将在联接中被选择 这些表之一用于存储平均值-其架构为bigint(20)id,varchar(20)string_id,datetime date_created和float average_value 我想做的 -两个相对昂贵的查询: 计算新的平均值: 使用外键,从大表中选择多达几百万条单独的记录。 计算新的平均值,按string_id分组。 将结果插入平均值表。 按照当前的构造,此查询使用两个联接。 为服务用户创建非规范化的只读记录: 使用外键从大表中选择1,000-40,000条记录中的任意位置。 通过字符串id列与最新记录上的其他四个表连接。 将结果插入到非规范化表中。 这些记录供前端使用以向用户显示信息。 按照当前的构造,此查询使用四个联接。 我计划在批处理后端数据库上运行所有这些昂贵的查询,这些查询会将其结果推送到处理用户请求的实时前端数据库服务器上。这些查询将定期运行。我还没有决定多久。平均查询可能每天进行一次。反规范化查询将需要更加频繁-也许每隔几分钟。 目前,这些查询中的每一个查询都在一台非常低端的计算机上的MySQL中运行,该计算机的数据集在“大表”中具有10万条记录。我既担心扩展能力,又担心扩展成本。 问题: 这种方法听起来不错吗?从全局角度看,这显然有什么问题吗? RDBMS是正确的工具,还是我应该看看Hadoop系列中的其他“大数据”解决方案?我倾向于使用RDBMS,因为数据是结构化的并且很好地适合于关系模型。但是从某种意义上说,据我了解,我可能不再能够使用RDBMS。真的吗?什么时候需要此开关? 能行吗 这些查询能否在合理的时间内运行?我可以等待几个小时来查询#1,但是查询#2应该在几分钟内完成。 从硬件角度我应该考虑什么?我的RAM和CPU瓶颈可能是什么?我认为在RAM中保留索引很重要。还有什么我应该考虑的吗? 在某个时候,我可能必须对数据进行分区并使用多个服务器。我的用例看起来已经属于该类别了,还是可以在一段时间内垂直扩展一台计算机?这样可以处理10倍的数据吗?100倍?
11 mysql  rdbms 

3
在MS SQL数据库中记录庞大的相互关联的存储过程Web:什么工具或格式?
我希望这是一个比“阅读一千页的书”更短的答案的问题,但是,如果那是真实的情况,那就来问我。 我不是真正的DBA,我是一名软件开发人员,他意识到我们需要DBA,但我工作的商店的DBA为零。但是,我们的MS SQL数据库设计(包括几个核心存储过程)非常混乱。存储过程很慢,我们怀疑它们存在错误,但是我们甚至不知道它们应该如何工作,因此我们不知道如何修复它们。 首先,我决定将所有工作方式记录下来,然后开始单元测试,并建立一组单元测试,以帮助证明存储过程确实有效。他们执行的逻辑是我们应用程序的关键部分,您可以说,这是公司主要产品的“皇冠上的宝石”,并且其工作方式完全没有记载。 我正在寻找专业的DBA可能期望存在的特定技术文档,或者如果需要的话,可能会写自己理解一些相互调用的庞大的存储过程。 记录大型存储过程的通常格式是什么?每个In参数的期望值的描述(即“先决条件”,“后置条件”,即布尔参数,当您打开或关闭它时会发生什么变化,等等?) 通常如何记录它?仅SQL注释?特定于目的的外部工具?外部“文档”?除了MS SQL Management Studio,我们没有其他SQL工具,但是我们想知道是否有一种工具可以更好地理解,记录和测试我们的环境。也许这是问我问题的更好方法。我需要什么工具来解决我们的困境? 我们的目标是能够: 答:使用我们生成的文档或我们添加到环境中的任何工具来帮助理解这些过程应该如何工作,因此我们可以继续为存储过程创建单元测试范围。 B.向客户端应用程序开发人员展示如何正确调用这些复杂的存储过程。 C.对我们的存储过程进行单元测试。

2
通过数据库链接查询是否超时?
编辑/前言: 该问题已从SO迁移过来,因为我对DB链接查询超时问题特别感兴趣。SO所提供的解决方法是可以的,但是我对这个问题本身很感兴趣。 动机: 我有一个查询“永远”运行(超过2天,直到终止会话),它使用数据库链接。问题似乎是远程数据库变得不可用,并且由于某些未知原因ORA-02068(没有在这里讨论)而没有提出(查询在此等待)。 (该查询是由dbms_scheduler作业发出的,该作业在PL / SQL程序包中执行一个过程。因此,该作业也被卡住了。但这对于此问题的核心没有特别的兴趣) 我已经通过将我的一个测试数据库置于静默模式并通过数据库链接对其进行查询来模拟这种情况。如预期的那样,查询一直在等待,直到手动取消或取消取消远程DB。 问题: 我无法控制远程数据库的行为和正常运行时间,因此我正在寻找某种可能性来设置使用数据库链接的查询的超时时间。 我已经研究过配置文件(CPU_PER_CALL等),sqlnet.ora参数,将本地命名参数直接添加到连接字符串中(例如添加(connect_timeout=10)到数据库链接定义中),使用运行命令... for update wait 1,但是它们对于繁忙或空闲会话均有效,但不适用于等待中的会话。 因此,我正在数据库链接的“本地”侧搜索某些选项,该选项为通过数据库链接的查询设置超时。由于我对这些特定的DB没有DBA权限,因此 喜欢alter session set xyz或喜欢一些解决方案select ... from a@b "wait 100" --(yes, I know this syntax doesn't exist)。 我目前使用的是10gR2,但将在几周内升级到11gR2,因此使用这些版本中的任何一个都将很有用。

3
如何控制SSMS连接对话框中列出的服务器的顺序?
当我们从SQL 2008-> 2012升级时,我当前的项目涉及很多数据库改组,重新分配硬件任务,重复进行。 一个小麻烦是SSMS中的连接对话框重新排列了服务器的顺序,以将最新的放置在最前面。鉴于在特定的一天我要连接到6到10台数据库服务器,并希望快速在列表中找到特定的服务器,因此这种行为比提供帮助更多的是障碍。 有没有一种方法可以禁用此行为,使服务器按字母顺序排列,或者按添加顺序排列……或者每次我连接到服务器时都不会更改的任何内容? 除此以外,是否有一种完全不同的方法可以更好地管理从列表/服务器场到特定服务器的连接? 我正在将SSMS用于SQL 2012(尽管我也对2008解决方案感到好奇)。
11 sql-server  ssms  tools 

3
INNODB性能泄漏在哪里?
我有一个奇怪的问题,似乎无法解决。我不是服务器/数据库管理员,而是Web程序员,所以我希望这里有人可以帮助我。 情况 我正在开发一个处理很多update,insert和delete请求的系统。因此,我选择INNODB作为其行锁定功能的存储引擎。我们使用Gearman并行化在不同服务器上的工作,每10分钟更新60,000条记录。该代码在PHP中,我们正在使用Zend Framework。 问题 SQLSTATE[HY000]: General error: 1205 Lock wait timeout exceeded; try restarting transaction 我们几乎每30分钟就会从我们的一名Gearman工人那里收到上述错误。 的 mysql_report MySQL 5.1.63-0+squeeze1 uptime 15 9:52:12 Tue Sep 11 21:25:23 2012 __ Key _________________________________________________________________ Buffer used 55.00k of 16.00M %Used: 0.34 Current 2.92M %Usage: 18.24 Write hit 99.95% Read hit 100.00% __ …

1
为什么死锁图上有无害条目?
我正在尝试学习如何分析SQL Server 2008的死锁图,并且发现了大量带有空<victim-list>节点的条目。我不明白这些条目代表什么:如果没有受害者,我如何确定导致死锁的waitresource?这些条目是什么意思? 这是我看到的条目的快速示例: <deadlock-list> <deadlock> <victim-list /> <process-list> <process id="processd2b6508" taskpriority="0" logused="10000" waittime="31" schedulerid="63" kpid="9104" status="suspended" spid="69" sbid="0" ecid="184" priority="0" trancount="0" lastbatchstarted="2012-07-30T01:10:45.550" lastbatchcompleted="2012-07-30T01:10:45.550" clientapp=".Net SqlClient Data Provider" hostname="XXXXXXX" hostpid="3648" isolationlevel="read committed (2)" xactid="30461033" currentdb="5" lockTimeout="4294967295" clientoption1="671088672" clientoption2="128056"> <executionStack> <frame procname="" line="1" sqlhandle="0x020000002340c50225c17d0eec9bf7c51129348edffd1c70" /> <!--About 2 more frame tags... --> …

5
SQL Server是否等同于Oracle RAC的功能?[关闭]
关闭。这个问题是题外话。它当前不接受答案。 想改善这个问题吗? 更新问题,使它成为数据库管理员Stack Exchange 的主题。 5年前关闭。 我做了一些谷歌搜索,比几年前还没有找到这个问题的答案,所以我想问一下。Oracle的RAC功能可为读写事务提供负载平衡,并且可在不停机的情况下实现横向扩展和高可用性(至少据我所知-我们将部署第一个使用RAC的数据库,因此,看看效果如何)。 是否提供任何提供等效功能的SQL Server功能集(或您可以在其上安装的第三方组件)?我们一直使用Windows群集,在该群集中,故障转移事件会导致大约20-30秒的SQL停机时间-始终可以忍受,但并不理想。现在,借助SQL 2012中的AlwaysOn,SQL Server将其缩短到大约15秒,并增加了只读-辅助数据库的概念,但是它们仍然要求通过单个连接点阻塞写事务(由于许多事务都需要处理,因此大大改进了)只是阅读,但仍然不是真正的负载平衡),并且在节点故障或需要打补丁的情况下,仍然存在停机时间。 我想这只是出于好奇-我觉得这是SQL Server落后于Oracle的唯一领域(至少在我个人使用的功能中)。我想看看是否有任何选择可以弥补这一差距,并在我们等待添加Microsoft的等效功能时(也许在SQL 2014/2015中)改善我们自己的SQL Server部署?


2
从一个主作业顺序调用多个SQL Server Agent作业的好方法?
我有几个应顺序运行的SQL Server代理作业。为使应执行的作业保持良好的概览,我创建了一个主作业,该主作业通过调用来调用其他作业EXEC msdb.dbo.sp_start_job N'TEST1'。在sp_start_job瞬间完成(作业步骤1),但我想我的主要工作要等到工作TEST1已经调用下一个工作之前完成。 因此,我编写了这个小脚本,该脚本在作业被调用后立即开始执行(作业步骤2),并迫使主作业等待子作业完成: WHILE 1 = 1 BEGIN WAITFOR DELAY '00:05:00.000'; SELECT * INTO #jobs FROM OPENROWSET('SQLNCLI', 'Server=TESTSERVER;Trusted_Connection=yes;', 'EXEC msdb.dbo.sp_help_job @job_name = N''TEST1'', @execution_status = 0, @job_aspect = N''JOB'''); IF NOT (EXISTS (SELECT top 1 * FROM #jobs)) BEGIN BREAK END; DROP TABLE #jobs; END; 这足够好用。但是我觉得WHILE 1 = …

5
在100mm记录上使用JOIN进行更新,如何做得更好?(在T-SQL中)
实际上,我需要更新单个表中的1亿条记录,通过用一个ID替换列的varchar值来规范化该表。(我说“替换”,但实际上我正在将ID写入另一列。) 我想要实现的是对数据集进行规范化。尚未规范化的数据没有索引。我的想法是,我不会在等待时在原始值上建立索引,而是在更新完成后索引将要用tinyint值替换varchar值的外键。 UPDATE A SET A.AutoClassID = B.AutoClassID FROM AutoDataImportStaging.dbo.Automobile as A JOIN AutoData.dbo.AutoClass as B on (A.AutoClassName = B.AutoClassName) 背景 在Server 2008 R2上使用MSSQL 2008 R2 服务器有8 GB RAM 服务器具有一个RAID10和7200 RPM SATA(我知道这不是很好,在生产中,它只能读取数据,而不能写入数据;加上最近的HD短缺使得这成为必需的成本) 服务器具有双四核Xeon CPU 机器没有做任何其他事情(当前专用于开发人员,仅此过程) 打开了简单的日志记录(?-但是它仍会记录下来以便可以回滚吗?) 请注意,该查询引用了两个不同的数据库,因此值得 表中要更新的记录的“宽度”为455字节 执行期间的资源 物理RAM已用完 磁盘I / O已用尽 CPU几乎什么也没做(扼要点是I / O) 运行时间已经有14个小时了! 我怀疑有些事情,例如我需要在原始数据上建立索引,即使在规范化更新后将删除列(AutoClassName)时也是如此。我还想知道是否应该一次循环遍历一个表而不是JOIN,这在我开始时似乎很荒谬,但现在看来它会更快。 如何为剩余的规范化更新(类似于此方法)更快地更改方法?

1
经常查询100,000条记录的MySQL表
我有一个大约100个表的数据库,用于存储各种信息。 最重要的表是我们的订单表,该表用于存储客户的订单,截止到现在并且正在不断增长,已超过100000条记录。 该表是我们数据库中查询最多的表,用于实时订单仪表板,统计信息,分析等所需的信息的各个部分。 我会定期监视数据库,并在数据库上启用慢速查询以跟踪问题。 我每天都使用mysqltuner之类的脚本来执行查询。 我还使用mysqlsla收集有关数据库中最慢的10个查询的信息。 sample stat Count : 11.48k (30.66%) Time : 19.623758 s total, 1.709 ms avg, 239 µs to 2.475017 s max (18.64%) 95% of Time : 5.246833 s total, 481 µs avg, 239 µs to 1.095 ms max Lock Time (s) : 14.460071 s total, …


2
策略是要处理其中包含太多文件(BLOB)的SQL Server DB?
方案: 为ASP.NET应用程序提供服务的SQL Server 2005数据库(在单独的Web服务器上)。 数据库: DB中大约有5GB的“普通”数据,以及大约15GB的“文件”(例如,存储为图像的20万PDF(BLOB)之类的东西)。用户正在上传更多文件,并且正在迅速消耗更多磁盘空间(在未来几个月中,DB可能会增长到50GB,主要是文件)。 问题: 在数据库中存储如此多的文件已经引起了问题(例如:数据库的大容量使偶尔的整个DB备份和部署变得困难。)。 我们担心会有更多问题。(例如:性能问题-可能是由于无法将整个数据库保留在RAM中引起的,也许吗?) 问题: 您对这个问题有什么建议?将文件存储在文件系统中?将数据库分成两部分,并为文件分配一个更大,更慢的文件? 需要的更多详细信息: 这些文件不是非常重要,并且不需要非常快速的访问时间-几秒钟就可以了,目前,每小时最多可以选择十二个文件。数据库中的其他“正常”数据包含每秒需要多次的信息。

2
在所有数据库上运行SQL查询
我有一个使用cPanel和phpmyadmin的托管帐户。 我有50个数据库,都是WordPress。 我需要修改此查询,以便它遍历所有数据库以更新密码。 UPDATE'wp_users'SET'user_pass'= MD5('somepassword')WHERE'user_login'='admin'LIMIT 1; 希望找到一种可以针对所有数据库的解决方案,而不必一一遍遍。 谢谢
11 mysql  phpmyadmin 

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.