数据库管理员

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

4
简单的SQL查询未完成[关闭]
已关闭。这个问题需要更加集中。它当前不接受答案。 想改善这个问题吗?更新问题,使其仅通过编辑此帖子来关注一个问题。 4年前关闭。 我还不太了解如何提出这个问题,因为我们还不了解,但是我想提早提出,因为这看起来像是不容忽视的事情。 本周,我们开始遇到数据库服务器的问题。它似乎是一个数据一致性问题,甚至在非常简单的查询和小型表上也通过超时来体现。我们通过在本周早些时候重新启动服务器来“解决”该问题,但该问题消失了,但是现在看来它又回来了,这次是在更关键的表上。例如,我刚刚进行了一些调查,并且正在查看这样的查询: SELECT * FROM table WHERE id = 1234 特定的ID。该表有大约30+百万行。但是,似乎只有一小部分记录会发生这种情况。我敢打赌,当我重新启动服务器或备份并在另一台服务器上还原数据库时,一切都会好的。但是我会努力的。 此时,我正在运行: DBCC CHECKTABLE ('table', NOINDEX) 但似乎它将永远持续下去。当我们第一次遇到问题时,我检查了违规表,一切都很好。这个新桌子更大了。 一些背景技术信息: SQL Server 2008 R2,Windows Server 2008 R2 AWS / EC2,m2.2xlarge,32 GB RAM,4 x 1TB RAID 0 几乎没有磁盘IO,似乎大多数数据库都在内存中 总数据库大小:100GB ELB卷是“全新的”。我们本周创建了它们。 编辑:我只是使用以下命令: SELECT sqltext.TEXT, req.session_id, req.blocking_session_id, req.wait_type, req.wait_time, req.last_wait_type, req.wait_resource, req.open_transaction_count, …

2
如何在MongoDB中索引动态属性
我在MongoDB中有以下类型的数据(与我的实际情况相比有所简化): { "name":"some name", "attrs":[ {"n":"subject","v":"Some subject"}, {"n":"description","v":"Some great description"}, {"n":"comments","v":"Comments are here!"}, ] } attrs数组是动态属性的容器,即我事先不知道将哪种类型的属性放在那里。n代表名称,v代表价值。 《 MongoDB In Action》一书将其描述为在属性完全可上调的情况下具有动态属性的解决方案。它还描述了您可以像这样对它建立索引: db.mycollection.ensureIndex({"attrs.n":1, "attrs.v":1}) 然后可以这样查询: db.mycollection.find({attrs: {$elemMatch: {n: "subject", v: "Some subject"}}}) 当我对此进行测试时,我会得到非常差的性能。我用mycollection测试了200万个文档,但没有索引似乎表现更好。 那么,问题来了,有没有一种方法可以对这种动态属性设置建立索引,从而使索引具有良好的性能?就我而言,仅具有“主题”和“描述”之类的键并对其全部建立索引是不可行的...
8 index  mongodb 

2
使用数据库快照进行报告的优势
使用数据库快照进行报告的性能优势是什么? 从我的角度来看,这可能会降低性能,因为原始数据库中的每次写入都必须对快照本身进行另一次写入。 我可以看到,无论何时要报告数据,您都将使用快照,但这并不属于性能类别。 再说一次,是否有性能优势?

4
了解SQL Server锁定和并发性的资源?
最近的矿山锁定和并发问题证明了这一点很困难。 您能否为中级至高级的SQL专业人员提供任何良好的资源,以便对这些专业知识进行深入研究,从而使他们能够适当地学习该领域中的所有固有陷阱,从而进行适当的学习? 我在考虑各种资源-教程,博客,手册页,PASS会话或任何其他内容。

1
MySQL按表读取/写入
我正在优化数据库。本质上,我试图在数据库中找到写入最多和读取最多的表。之后,我将把这些表符号链接到单独的驱动器中。 有没有一种方法可以跟踪每个表的活动?就像在后面的IOPS中一样,每个表的写入,读取次数是多少?

2
SQL Server是否具有Date_Format函数?
我发现的只是DateFormat我可以选择的预定义列表,像这样 我记得在MySQL(以及PostgeSQL?)中,您可以定义日期格式: DATE_FORMAT(now(),'&m_%Y') --for 02_2012 etc. SQL Server是否具有相同的功能?我看到人们必须编写一个函数来执行此类操作,它是否具有内置函数? 编辑: 我刚刚找到了DatePart功能。它可以以Month作为数字,但是即使我使用,也总是返回1位数 datePart(MM, getdate())


2
单位和复杂单位转换的良好关系结构是什么?
我的公司从事能源行业,我需要想出一种很好的方法来表示计量单位的转换。我已经进行了一些搜索,但还没有找到需要的深度方面的好文章。大多数有关单位转换的信息都假定给定的单位1有一个已知的(硬编码)转换率可以到达单位2,并且它是简单的数学运算(这是我发现的最复杂的示例,仍然没有用)。但是,在现实世界中并非总是如此,对于我们必须处理的事情当然也不是正确的。(很抱歉写了很长时间-我正尝试提供尽可能多的信息!) 棘手的示例1: 某些转换会随时间而变化,例如将$ 5转换为Euros,反之亦然。听起来这与能源无关,但实际上在能源商品市场(想想股票市场)中。 棘手的例子2 :(过于 简单化)某些天然气燃烧得比另一些更热。另外,可以根据气体中的能量(例如Therms)或基于该气体的体积(例如1000立方英尺的MCF)来测量/存储天然气,还有其他可能性(例如作为吨用于质谱)。汽油的一个例子是1加仑的93辛烷无铅汽油比1加仑的93辛烷无铅汽油少。 棘手的示例3: 除了拥有这些度量单位之外,我们还经常需要处理费率,例如$ / Therm或$ / MCF。因此,我们需要某种方式来处理这些费率以及它们与基本单位的关系,因此,如果我们需要从$ / Therm转换为€/ MCF,我们可以并且它使用与从Therm转换为MCF相同的发布费率。 棘手的示例4: 以前,我曾经非常宽松地使用“ 能量 ”一词,有时可能会错误地使用它。从现在开始,这种情况正在改变。所以最后一个曲线球是我们既要处理能源又要处理电源。对于电力,这意味着kWH与kW(尽管是Yahoo Answers,这是一个相当不错的解释)。数据比喻:这就像将下载的总MB数据与Mbps进行比较ISP为您提供的带宽。像数据一样,能量也需要时间来传递。继续进行数据类比,我们可能必须计算一段时间内消耗的平均有效带宽,因此,假设在1分钟内下载了60MB,则“有效”速率将为60 * 8/60 = 8Mbps。这里的“窍门”是,如果我们将Mbps本身存储为一个单位,那么即使它也涉及时间成分,我们也需要某种方法将其直接与MB相关联。幸运的是,从能源到电力的转换(反之亦然)对我们来说是一件非常罕见的事情,因此我们的解决方案应针对所有其他棘手的示例进行优化,并希望也允许这个示例,但不要处理相关的问题。能源到电源是一种选择。 整蛊例如5: 这主要是3 + 4,我们可以同时拥有每千瓦$和$每千瓦时,所以利率同时面对电力和能源。 举个简单的例子: 有些转换非常容易,而这些转换是网络上大多数信息都可以处理的。1000 Wh = 1kWh等。与Therms和Decatherms或kW到MW等相同。在这里我不需要帮助,但请记住,我们约有70%的转换属于此类。 我对如何开始但不确定如何完成的想法: 这显然很混乱,因此我建议我们选择一个标准的度量单位来存储每种商品和“使用类型”的所有数据。因此,对于电力,我们的标准能源单位为kWH,我们的标准动力单位为kW。因此,要转换为任何其他能源/功率单位,我们仅需要与标准之间的转换率,而不是每种可能的组合。如果我们需要将MW转换为W,我们总是可以通过将其转换为kW来实现。 由于转换率可能取决于特定时间,因此我们必须允许存储与测量相关的时间。我怀疑我们不必担心这些转换率的变化快于每小时一次,甚至可以假设每天一次。 由于转换率可能取决于发布的值,因此我们必须允许该值相对于度量存储的能力。我怀疑我们不必担心这些转换率的变化快于每小时一次,甚至可以假设每天一次。 解决所有这些问题之后,我期望创建一个仅处理所有单位转换的Web服务。我不是要执行这些转换的SQL,而是可以做一些创造性的缓存,因此我并不是绝对要锤击这些表,但是有时它需要处理用户访问的网站中每页面加载约400个值的转换。我不确定这是否/如何重要。 我不知道应该在什么级别存储从未更改过的转换率与确实发生更改的转换率,以及如何以一种易于使用的方式快速访问这些转换率的方法,一起工作。 关于如何解决这个问题,甚至某些出版的阅读材料可能有帮助的想法?我正在使用SQL Server(即将成为SQL Azure),但这并不重要。正确表示这一点的模式就是我在这里遇到的问题。如果它像英寸和厘米一样简单,那很容易。但是这里存在转换率变化的问题。


4
执行访问另一个SQL实例的存储过程
如果这个问题重复另一个已经提出的问题,我深表歉意。我搜索了几个小时,却没有找到适合我的情况。 期望的结果 使用SQL身份验证的用户具有Server1(默认实例)上的Database1的执行权限。用户执行存储过程,作为其过程的一部分,访问存储在Server1 \ Instance2上的数据库2。我希望它既安全又简单(两者都很重要)。 更多信息 我的Windows凭据可以访问两个实例(位于同一服务器上)。因此,我可以在登录时轻松执行存储过程。但是,我不想给用户我的访问权限。我还需要使用SQL登录名,因为该用户将不在域中。 我想要的是为存储过程提供仅针对该过程的访问级别。由于我是系统管理员,因此将为用户提供该过程所需的一切。如果我能做到这一点,我可能会为此目的创建一个帐户,而不是使用我的帐户,但是无论哪种方式都是安全的,因为我可以控制存储的proc的工作。 我尝试将“ WITH EXECUTE AS”语句放入存储的proc中,但无法获取Windows登录信息。当我将其放入时,编译存储的proc时会出现以下错误: 无法以用户“ domain \ jdoe”的身份执行,因为它不存在或您没有权限。 就像我说的,用户在两台服务器上都是sysadmin,所以我不确定它还需要什么。 我研究了以下内容: 可信任-我宁愿不公开我的数据库,这看起来很可怕 链接服务器-我不想授予额外的权限。我不信任其他数据库可以访问我的数据库,也不信任我的数据库可以访问所有其他数据库。 证书-这似乎很复杂而且很困难。除非我能找到一种非常简单的方法来做到这一点并加以维护,否则我不确定这样做是否值得。 所有权链接-再次令人恐惧。当我的目标是防止安全问题时,这似乎会引起更多的安全问题。 镜像用户-我什至在另一个服务器实例上创建了相同(显然是不同的SID)用户,并给了它相同的密码。不行 我觉得自己缺少明显的东西,但不确定是什么。由于我整天都在用头撞墙,所以我可能太近了以至于看不到它。如果有人可以帮我或指出正确的方向,我将不胜感激。我会说我已经阅读了很多MSDN文章(男孩,我讨厌他们-他们似乎从来没有告诉我我想知道什么)。我真正想要的是一个简单易学的教程,它将指导我如何进行操作。缺少这一点,即使是一般性的指示我需要走的方向也会有所帮助。

1
堆栈溢出可以在SQL Server Web Edition上运行吗?
我正在开始一项新的网络冒险,可能需要扩展到大量用户。 我对SQL Server Web版的SPLA许可充满信心,但想知道我是否需要考虑升级到Standard,Enterprise或DataCenter(肯定不会是这个)。 我知道一个人不应该在扩展之前就考虑扩展,但这会影响站点的架构和业务计划。 我知道处理器限制是每个物理处理器而不是线程,因此我不必担心。但是,某些镜像和备份功能会让我担心。SO是否依赖这些功能? tl; dr: 像Stack Overflow这样的网站可以在SQL Server Web上运行吗?维护和高可用性的哪些方面将无法实现?

3
使用复制进行横向扩展
阅读了使用复制进行横向扩展后,如何将不同的查询路由到不同的服务器,例如,SELECT我想路由到从属服务器和NON-SELECT主服务器。我假设可以使用haproxy作为负载均衡器,但是我发现在haproxy级别的查询之间无法区分开吗?另外,假设某人已直接到达主服务器,主服务器如何识别这是SELECT查询并显示发送给从属服务器或负载平衡器。

1
MySQL下的数据库大小与磁盘上的实际大小之间存在实质性差异
当我检查MySQL下数据库的大小时,得到以下信息: MariaDB [(none)]> SELECT table_schema "Data Base Name", sum( data_length + index_length ) / 1024 / 1024 "Data Base Size in MB", sum( data_free )/ 1024 / 1024 "Free Space in MB" FROM information_schema.TABLES GROUP BY table_schema; +--------------------+----------------------+------------------+ | Data Base Name | Data Base Size in MB | Free …
8 ubuntu  mysql  mariadb 

3
SQL Server-多个运行总计
我有一个包含事务的基本表,我需要创建一个具有运行总计的表。我需要它们是每个帐户的,并且每个帐户还有一些运行总计(取决于交易类型),在其中,每个子帐户都有一些运行总计。 我的基本表具有以下字段(或多或少): AccountID | SubAccountID | TransactionType | TransactionAmount 考虑到我每个Account / TransactionType有大约4种类型的运行总计,每个Account / SubAccount / TransactionType有2种以上的运行总计,我有大约200万个帐户,每个大约有10个子帐户,而我的交易量约为1万笔每分钟(在最大负载下),您将如何做? 这也必须通过SQL作业异步运行,以创建聚合而又不属于事务本身。 我在这里使用游标非常费时-花费的时间太长。我真的很感激任何或多或少都相同的建议/文章。

1
用NOT NULL定义的MySQL列允许为空
我不久前创建了一个表,并开始向其中添加数据。最近,我在其中添加了新列(address),并将其NOT NULL作为新列的一部分。旧行(预添加)仍然为空,这在定义中创建了一条警告。但是,仍允许带有新列的新行插入空值。 新列的预添加内容是否为空?如果是这样,有没有办法告诉MySQL即使以前不允许它呢? mysql> show create table my_table\G *************************** 1. row *************************** Table: my_table Create Table: CREATE TABLE `my_table` ( `entry_id` int(11) NOT NULL auto_increment, `address` varchar(512) NOT NULL, `follow_up_to` int(11) default NULL, PRIMARY KEY (`entry_id`), KEY `follow_up_to` (`follow_up_to`), CONSTRAINT `my_table_ibfk_1` FOREIGN KEY (`follow_up_to`) REFERENCES `my_table` (`entry_id`) ON UPDATE CASCADE …
8 mysql  null 

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.