Questions tagged «sql-server»

所有版本的Microsoft SQL Server(非MySQL)。还请添加特定于版本的标记,例如sql-server-2016,因为它通常与问题相关。



2
如何使联合视图更有效地执行?
我有一个大表(上千万个记录),出于性能原因,我们将其拆分为活动表和存档表,使用直接字段映射,并每晚运行一个存档过程。 在代码的几个地方,我们需要运行结合了活动表和归档表的查询,这些查询几乎总是被一个或多个字段过滤(我们显然已经在两个表中都添加了索引)。为了方便起见,有如下视图是有意义的: create view vMyTable_Combined as select * from MyTable_Active union all select * from MyTable_Archive 但是如果我运行类似的查询 select * from vMyTable_Combined where IndexedField = @val 在使用过滤之前,它将对Active和Store中的所有内容进行合并@val,这会降低性能。 是否有任何巧妙的方法可以使并集的两个子查询@val在创建并集之前查看每个过滤器? 或者,也许您会建议采用其他方法来实现我的目标,即一种简单有效的方法来获取由索引字段过滤的联合记录集? 编辑:这是执行计划(您将在这里看到实际的表名): 奇怪的是,活动表实际上使用了正确的索引(加上RID查找?),但是归档表正在执行表扫描!

2
使用快照隔离功能,SQL Server数据库写入速度是否变慢?
我的系统中发生了很多僵局。 我想使用快照隔离来修复它们,但是我的DBA对此有保​​留。 他的关注点之一是快照隔离会减慢写入速度。这是因为它必须先写入缓存,然后再写入TempDb(行版本),然后才能返回到调用方。 “正常”写入可以只写入高速缓存,然后完成。 这是行版本控制的工作方式吗?还是比这更复杂?是否以某种方式并行执行这些操作? 还是快照隔离的写入速度较慢?

3
如何确定何时创建一个新表来保存可以从查询中获取的数据?
我们有一个付款表,代理商可以得到付款佣金。佣金基于几个不同的因素,例如获得付款所花的时间,因此在确定代理人获得的佣金率时需要进行一些计算,但是没有什么复杂的事情。 例如,它可能永远不会比这更复杂: SELECT Payments.Amount * CASE WHEN DateDiff(year, Client.Received, Payments.DatePaid) = 1 THEN Rates.Rate1 WHEN DateDiff(year, Client.Received, Payments.DatePaid) = 2 THEN Rates.Rate2 ELSE Rates.Rate3 END 建立第二个表来保存此数据而不是在需要时查询它是否有意义?还是我应该坚持使用运行时查询来在需要时提取数据? 更重要的是,在确定是否需要查询数据时是否应该运行查询,或者是否应该将数据存储在自己的单独表中时,应使用哪些因素?

1
sp_send_mail的数据库权限出现问题
我正在尝试发送数据库邮件,但是却收到了EXECUTE permission denied on the object 'sp_send_dbmail' database 'msdb', schema 'dbo'.。我正在运行的代码如下: SELECT SUSER_NAME(), USER_NAME(); Create USER kyle_temp FOR LOGIN Foo EXECUTE AS USER = 'kyle_temp'; SELECT SUSER_NAME(), USER_NAME(); EXEC msdb.dbo.sp_send_dbmail @profile_name = 'Mail Profile', @recipients = 'test@test.com', @subject = 'Test', @body = 'Test' REVERT; DROP USER kyle_temp Foo登录显示它已映射到msdb中的Foo用户。当我查看msdb中的foo用户时,我看到它已检查“ DatabaseMailUserRole”,并且对dbo执行sp_send_dbmail。 我想念什么?

2
RFID合适的数据类型是什么,格式是否有标准定义?
我有一个数据库,该数据库基于嵌入在他们鞋子中的RFID标签来跟踪人们。该数据到达一VARCHAR(MAX)列,其他数据按特定顺序混合。到目前为止,所有RFID值的格式如下: AnnnnnnnnAnnAAAA (where A = 0-9 and n = A-Z) 我正在写一份报告,从这些消息中提取RFID并将它们存储在自己的表中。只要RFID遵循相同的模式,我就可以找到它们。如果RFID格式更改,我的提取过程将失败。 RFID标签是否有标准格式?哪种数据类型最适合存储RFID标签? 我现在要去VARCHAR(20)。

1
在整个SQL Server数据库上获取统计信息的最有效方法
我想要做的是查看我们的数据库并锁定所有auto-shrink设置,并掌握数据库/表高度分散的情况。 我是否可以运行特定的脚本来了解每个数据库的好主意? 我知道我可以在每个表级别(至少是SQL Server 2005)上运行以下命令: DBCC SHOWCONTIG ('DB.TABLE'); 但是如何运行才能显示数据库中的所有表? 谢谢

5
是否可以自动通知我SQL Server中的长时间阻塞?
大约每周一次,我必须解决SQL Server 2005数据库上的阻塞链,这是由Access 2003前端的长期读取锁定引起的。每当用户打开某个表单时,该锁便被取出;当用户完成滚动或关闭该表单时,该锁便被释放。由于我们的许多用户打开此表单作为参考,因此这些锁会保留一段时间。对表的任何更新都会导致阻塞,并且突然之间没有人可以从该表中进行选择,因为他们都在等待第一个锁。这对我们来说是个大问题,因为许多应用程序都依赖于此数据。我知道这种锁定行为是Access与链接表一起工作的一部分。 我一直在通过Activity Monitor解决问题,方法是在发现问题时杀死SELECT进程中的Head Blocker。这是一个问题,不仅是因为我花了一些时间手动进行操作,而且还因为它是被动的。到我听说时,对于许多人来说已经是一个问题。 我想知道是否有一种自动方法来检查这些持久的封锁链,并通过电子邮件发送或自动解决问题。逻辑看起来很简单(“如果匹配此SELECT查询的任何进程被阻塞超过一分钟,请通知我/杀死它”),但我不知道如何使用SQL Server来实现。 对于它的价值,我认为正确的解决方案是修复或重写应用程序。但是,由于部门的政治原因,在接下来的几个月中这不是一个选择,因此我正在寻找一个权宜之计。

2
镜像日志在主数据库上为空,但在镜像服务器上为正常
我们有几十个基本服务器和相应的镜像,大多数都工作正常,但是其中1个的行为很奇怪。具体来说,sp_dbmmonitorresults对于给定的主体数据库,proc将所有列返回为NULL,而sp_dbmmonitorresults在镜像上则返回有效信息: 现在,我有一个大概的原因。当设置主服务器和镜像服务器时,在主服务器上设置不正确的区域设置(时间正确,但使用的是+4区域(美国等),则在设置镜像后,时间区域已更正为GMT +0(学校我知道的男孩错误,但c'est la vie!) 编辑:19/12/2012 今天,我删除了镜像,删除了镜像上的副本,然后重新设置了镜像,但这并没有解决问题!我将悬赏这个问题,以尝试深入研究这个问题。 要确认的是,如果我EXEC sp_dbmmonitorresults @database_name = 'ProScript'在每台服务器上手动运行,它将为主要服务器上的大多数值返回NULL,但在镜像服务器上返回正常,如下所示: 当跑到小学时: 缩放:单击查看完整尺寸的版本 照镜子时: 缩放:单击查看完整尺寸的版本 如您所见,时间是当前的并且数据库已同步,但是log_generation_rate,unsent_log,send_rate等在主数据库上都为NULL吗? 两台服务器都有每分钟运行的监控作业,并exec sys.sp_dbmmonitorupdate作为作业步骤等。 查看sys.sp_dbmmonitorupdate的源代码,它将从sys.dm_os_performance_counters- 中获取这些值,因此,如果我在镜像上运行以下命令: SELECT counter_name , cntr_value FROM sys.dm_os_performance_counters WHERE instance_name = 'ProScript' AND counter_name IN ( N'Log Send Queue KB', N'Log Bytes Sent/sec', N'Redo Queue KB', N'Redo Bytes/sec', N'Transaction Delay', N'Log …

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

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

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),但这并不重要。正确表示这一点的模式就是我在这里遇到的问题。如果它像英寸和厘米一样简单,那很容易。但是这里存在转换率变化的问题。

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.