数据库管理员

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

2
PHP-> Mysql持久连接池,没有mysql_pconnect-可能吗?
一段时间以来,我一直在试图找到一种不错的方法。但是很难找到合适的方法来做到这一点。我猜这一定有可能。 简单来说,这就是我要完成的工作: PHP / Other front end -> [SOCKET] -> Locally hosted 'pooler' -> [Pool of persistent TCP/IP connection(s)]-> Externally hosted MySQLD 是否存在这种工具/做事方式? 我们基本上想在不使用mysql_pconnect的情况下实现持久的mysql连接。 我诚恳地要求我们不要开始讨论如何不需要持久性连接等等。我们已经用完TIME_WAIT端口,并且遇到其他问题,如果实施这种类型的系统,则可以解决。 是的,总结一下……我们将实现一个基于本地端的Socket的mysql连接池,并持久化与(LAN)外部托管的mysql服务器的连接。 我们不使用事务或任何其他将受到回收的mysql连接影响的事务。 我们在前端使用master + master percona 5.5集群运行linux。 谢谢!
12 mysql 

3
为什么使用GROUP BY子句比不使用GROUP BY子句的集合查询显着更快?
我很好奇为什么有GROUP BY子句的聚合查询比没有子句的查询运行得这么快。 例如,此查询将花费近10秒钟来运行 SELECT MIN(CreatedDate) FROM MyTable WHERE SomeIndexedValue = 1 虽然这个过程不到一秒钟 SELECT MIN(CreatedDate) FROM MyTable WHERE SomeIndexedValue = 1 GROUP BY CreatedDate CreatedDate在这种情况下只有一个,因此分组查询返回的结果与未分组查询相同。 我注意到两个查询的执行计划是不同的-第二个查询使用Parallelism,而第一个查询则没有。 如果SQL Server没有GROUP BY子句,则以不同的方式评估聚合查询是否正常?在不使用GROUP BY子句的情况下,我可以做些什么来提高第一查询的性能? 编辑 我刚刚学会了可以将OPTION(querytraceon 8649)并行性的开销开销设置为0,这使查询使用某种并行性,并将运行时间减少到2秒,尽管我不知道使用此查询提示是否有任何弊端。 SELECT MIN(CreatedDate) FROM MyTable WHERE SomeIndexedValue = 1 OPTION(querytraceon 8649) 我仍然希望运行时间更短,因为查询是要在用户选择时填充一个值,因此理想情况下应该像分组查询一样是瞬时的。现在,我只是包装查询,但我知道这并不是理想的解决方案。 SELECT Min(CreatedDate) FROM ( SELECT Min(CreatedDate) as …

2
SQL Server TinyInt的存储
在SQL Server中,为什么将tinyint与9B存储在行中。由于某种原因,在NULL位图掩码的末尾似乎还有一个字节。 使用tempdb; 走 创建表tbl ( 我TINYINT不为空 ); 走 插入tbl(i) 值(1); 走 DBCC IND('tempdb','tbl',-1); 走 DBCC TRACEON(3604); -页面转储将进入控制台 走 DBCC PAGE('tempdb',1,168,3); 走 结果(由于DBCC PAGE首先显示了最低有效字节,所以我反转了字节): Record Size = 9B 10000500 01010000 00 TagA = 0x10 = 1B TagB = 0x00 = 1B Null Bitmap Offset = 0x0005 = 2B Our integer …

5
调查数据库设计:将答案与用户相关联
我正在为调查数据库做概念模型。 目标是存储用户给出的答案(这将是一个Android应用程序)。 我有三个实体:用户,问题和选项。 一个问题将有一个或多个选项(例如:您有多少名员工? 1-40,40-1000,+1000)。 选项将包含一个文本(1-40)和一个值(用户选择的值)。 用户将选择一个(或多个)这些选项。 我的概念设计是: 我不知道如何将答案与用户相关联。 我如何代表这种关系? 我是否有另一个实体代表期权价值? 该模型将存储问题和预制答案(提供的答案),并允许它们在不同的调查中重复使用。 我必须代表这样的问题: 这个问题与此有关:调查数据库设计:第一个版本。有错误吗?

1
SQL Server DBA需要了解有关Windows Server的哪些知识?
类似于我先前的问题,DBA对SSAS有什么了解?,它产生了一个非常好的答案(谢谢@ConcernedOfTunbridgeWells!),我现在问一个类似的问题: 为了能够高效地管理Windows Server并了解幕后情况,SQL Server DBA需要了解哪些Windows Server,以及了解SQL Server正常运行所基于的底层操作系统在什么程度上很重要成为一名出色的DBA? 它可以是个人特征,也可以是书籍,可以根据经验命名!

2
临时表和表变量之间的INSERT性能差异
我在SQL Server 2005中遇到以下问题:与使用临时表进行相同插入相比,尝试将一些行插入表变量中需要花费大量时间。 这是要插入到表变量中的代码 DECLARE @Data TABLE(...) INSERT INTO @DATA( ... ) SELECT .. FROM ... 这是要插入到临时表中的代码 CREATE #Data TABLE(...) INSERT INTO #DATA( ... ) SELECT .. FROM ... DROP TABLE #Data 临时表没有任何键或索引,两个查询之间的选择部分相同,并且选择返回的结果数约为10000行。单独执行选择所需的时间约为10秒。 临时表版本最多需要10秒才能执行,我不得不在5分钟后停止表变量版本。 我必须使用表变量,因为查询是表值函数的一部分,该函数不允许访问临时表。 表变量版本的执行计划 临时表版本的执行计划

3
针对社交网络/知识库社区的数据库建议?
我正在为一个想在夏天开始的新项目研究各种数据库类型和DBMS。 我已经在MySQL和postgreSQL中构建了系统,现在我想扩展我在数据库中的知识和经验。 我的项目将是一种社交网络/聚合知识的事物。(还没有开发出一个描述它的术语)。 我一直在看: Cassandra(使用自己的查询语言类型);对于功能丰富的内容并提供高性能的查询执行来说,这似乎是一件好事。但是我不太热衷于此,因为它需要Java环境才能工作,而且我希望与Oracle无关。 MongoDB(noSQL类型的DBMS);强大的可伸缩性,但是您将失去经过验证的SQL语言上已经可用的所有功能,例如业务信息查询。 系统要求: 数据文本,日期,时间,xml,小整数,blob, 结构/行为:标准化3NF,非实时,关系,可伸缩,健壮 环境: unix / linux,没有JAVA !,最好在C上运行 我想知道您是否可以指出我应该研究的任何其他数据库系统。 我也看过对象关系数据库,我很喜欢它们与PHP对象(PDO)一起工作的想法,但是它们的性能似乎有点差。 看到这里将有DBA,您对这些系统的任何反馈都将不胜感激。 谢谢

4
您知道过去12小时内每小时产生一条记录的简单方法吗?
我有一个报告,其中显示了过去12小时内按小时分组的事件计数。听起来很容易,但是我正在努力的是如何包括弥补空白的记录。 这是一个示例表: Event ( EventTime datetime, EventType int ) 数据如下所示: '2012-03-08 08:00:04', 1 '2012-03-08 09:10:00', 2 '2012-03-08 09:11:04', 2 '2012-03-08 09:10:09', 1 '2012-03-08 10:00:17', 4 '2012-03-08 11:00:04', 1 我需要创建一个结果集,该结果集在过去12个小时的每个小时都有一个记录,无论该小时是否有事件发生。 假设当前时间是“ 2012-03-08 11:00:00”,该报告将大致显示: Hour EventCount ---- ---------- 23 0 0 0 1 0 2 0 3 0 4 0 5 0 …

4
如何在没有表的数据库中存储数据?
我在学校中学到的只是SQL,它将数据保存到表中。现在,我正在一个项目中,数据存储在XML文件中。此外,每个XML都包含对可视文件(JPEG)的引用。 XML本身包含一千多个坐标点,以及有关数据的其他信息。 我认为将这些信息存储在表中没有任何意义。此外,我也无法使用SQL存储JPEG文件。 什么是合适的解决方案,或者我的推理存在错误? 如您所见,我对数据库还很陌生。因此,欢迎提出任何建设性的建议,链接和建议。

1
高并发存储系统
想象一下您的需求是,您有3个巨大的表(结构化数据),每个表有300亿行(总大小为4TB),并且许多并发用户(远程LAN机器上的并行os线程)将需要读取一部分通过他们的SELELCT WHERE GROUPBY查询和高度并发的数据,例如,同时进行10,000次并发读取,并且用户也需要将这些数据高度并发地插入(不更新)数据到这些表中,例如2000个并发写入器(遍及数据中心LAN网络) 。用户可能希望尽快从该存储中读取和插入数据,每次读取和写入将发生在毫秒到1秒范围内。 您推荐什么技术来满足这种要求?是否有任何数据存储或键值存储可以做到这一点?不能选择云。 一些说明: 用户不必立即查看数据,最终的一致性是可以接受的。数据可以通过存储可以提供的任何驱动程序进行访问,而用户又仅仅是在数据中心的远程计算机上运行的线程。查询大多类似于SELECT WHERE GROUPBY。 数据采用表格格式,每行约60个字节。 我无法使用DynamoDB或类似解决方案的无云选项。我必须能够在数据中心内部托管它。 可以一直读取表中的所有数据,并且使用模式是不可预测的。没有联接或超长查询。不需要DR,但是需要合理的HA,但是不必花哨。每个读者都基于其where子句获得了一批行,而这些子句与行并不是真正相关。我们可能每行的长度可以固定,但是我希望存储层对此有所担心。 另外,我最大的担心是与并发读取一起发生的所有那些并发写入。 非常感谢您对此的见解。 更重要的是,我有三个表,每个表有300亿行包含不同的对象类型

2
有多少存储过程参数太多?
我刚刚开始在SQL Server 2008中编写存储过程,并且有30多个参数。我从来没有写过超过10个参数,而这让我开始思考...什么时候有太多参数? 对于背景...这个程序基本上将INSERT单列成一个单一的表。也将有一个非常相似的地方。尽管稍小;对同一张表执行UPDATE的版本。大多数列相对较小,混合使用int和字符串(varchar(200))。 有什么问题;是好是坏; 一个具有大量参数的程序,我应该开始考虑其他模式的门槛是什么?

1
PostgreSQL数据库数据文件完整性检查
在运行PostgreSQL数据库系统时,我如何知道我的数据库整体上具有100%的完整性?基本上,我如何知道我的数据文件和页面是否全部100%良好且没有损坏? 在Microsoft SQL Server世界中,有一个命令可以执行DBCC CHECKDB,该命令将告诉您是否存在问题。如果您打算进一步了解该命令,则这里是一个链接。DBCC CHECKDB(Transact-SQL) 我是一个偏执狂的数据库完整性专家(任何以DBA类型角色使用数据库的人都应该这样),这种类型的事情使我很难在晚上睡个好觉。像这样的实用程序是必须的!在Google上进行的搜索已经找到了一些类似工具的尝试,我认为除非它是PostgreSQL项目正式接受的工具,否则我不会因为它的重要性而相信它。 这里有一些链接,人们在问类似的问题时,我认为没有真正的答案。在我看来,PostgreSQL需要拥有一些Oracle和Microsoft SQL Server似乎具备的工具。 第一个链接是我在该主题上找到的最有趣的链接。我认为对这篇文章的评论可能是这样总结的:“ Postgres在识别数据库损坏并修复它时非常la脚。检测到它的唯一方法是通过转储数据库或从数据库的每个表中选择* 。” PostgreSQL如何防止部分页面写入和数据损坏 检查数据和索引文件损坏-Dev Shed 帮助:我的桌子坏了! PostgreSQL:主键损坏,表不一致 我相信9.3有可能具有某些损坏检查功能。如果选择的话,似乎希望对页面文件进行汇总检查。因此,如果您考虑使用ZFS和/或带有页面检查求和的Postgres的将来版本,那么情况看起来就很好。 https://commitfest.postgresql.org/action/patch_view?id=759 更新:2012年1月14日-好像使用基于ZFS的文件系统一样,可以通过检查每个数据块的总和来检测损坏。我将不得不对此进行进一步的研究,看看是否可以通过一种解决方法,让一个晚上知道他们的数据库数据没有被无提示地破坏,从而使其睡个好觉。 更新:2012年1月17日-如何使用ZFS查找损坏的文件。http://docs.oracle.com/cd/E18752_01/html/819-5461/gbbwl.html#gbcuz 更新:2014年4月14日9.3确实获得了数据校验和。https://wiki.postgresql.org/wiki/What's_new_in_PostgreSQL_9.3


2
如何删除名称不明确的程序?
我正在使用信息提示... 我不知道我是怎么做的,但是数据库中有两个同名的过程。当我尝试用 DROP PROCEDURE myProc; 然后我收到一条错误消息 ERROR: Routine (add_adr_trigger_row) ambiguous - more than one routine resolves to given signature. Error Code: -9700 我如何取消该程序?

3
Oracle如何知道我是谁?
一点都不重要,但这激起了我的好奇心。 我刚刚使用Oracle SQL Developer工具首次登录了Oracle 10g数据库。 我使用了一个非我的名字(nottstest2)的通用用户登录名,该用户名来自一台不是我的名字(小胡瓜)的机器。我的名字在数据库中不存在,并且与登录名无关。 但是,服务器日志显示来自“乔恩·霍普金斯”的连接。 它怎么知道我是谁?它是否以某种方式从我的Windows登录名中被拉出(尽管我没有使用单一登录)?

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.