Questions tagged «sql-server»

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

3
如何通过数据库获取特定实例的CPU使用率?
我发现以下查询可按数据库检测CPU使用率,但它们显示不同的结果: WITH DB_CPU_Stats AS ( SELECT DatabaseID, DB_Name(DatabaseID) AS [DatabaseName], SUM(total_worker_time) AS [CPU_Time_Ms] FROM sys.dm_exec_query_stats AS qs CROSS APPLY ( SELECT CONVERT(int, value) AS [DatabaseID] FROM sys.dm_exec_plan_attributes(qs.plan_handle) WHERE attribute = N'dbid') AS F_DB GROUP BY DatabaseID ) SELECT ROW_NUMBER() OVER(ORDER BY [CPU_Time_Ms] DESC) AS [row_num], DatabaseName, [CPU_Time_Ms], CAST([CPU_Time_Ms] * 1.0 …

1
如何设计查询以暂停/睡眠/等待指定的时间?
我正在针对SQL Server 2000实例测试监视应用程序。如何编写需要花费指定时间的T-SQL查询?例如,大多数脚本语言都具有类似SLEEP命令的内容,该命令使您可以在指定的时间段内暂停脚本执行。我正在寻找与SQL Server 2000兼容的类似内容。这旨在测试监视应用程序的长期运行的查询阈值设置。


3
从胜负平局数据获取连胜数和连胜类型
我做了一个SQL小提琴为这个问题,是否对任何人来说都使事情变得容易。 我有一个各种各样的幻想体育数据库,我想弄清楚的是如何得出“当前连胜”数据(如“ W2”(如果该队赢得了他们的最后两场比赛)或“ L1”(如果他们输了)他们赢得上一场比赛后的最后一场比赛-如果他们并列最近的比赛,则为“ T1”)。 这是我的基本架构: CREATE TABLE FantasyTeams ( team_id BIGINT NOT NULL ) CREATE TABLE FantasyMatches( match_id BIGINT NOT NULL, home_fantasy_team_id BIGINT NOT NULL, away_fantasy_team_id BIGINT NOT NULL, fantasy_season_id BIGINT NOT NULL, fantasy_league_id BIGINT NOT NULL, fantasy_week_id BIGINT NOT NULL, winning_team_id BIGINT NULL ) 的值NULL在winning_team_id列指示该匹配领带。 这是一个DML声明示例,其中包含6个团队和3周对战的示例数据: INSERT INTO …

2
在SQL Server中,在以下情况下是否应强制执行LOOP JOIN?
通常,出于所有标准原因,我建议不要使用连接提示。但是,最近,我发现了一种模式,在该模式下,我几乎总是找到强制循环联接以提高性能。实际上,我已经开始使用并推荐它太多了,以至于我想征询他人的意见,以确保我不会错过任何东西。这是一个代表性的场景(最后生成示例的非常具体的代码): --Case 1: NO HINT SELECT S.* INTO #Results FROM #Driver AS D JOIN SampleTable AS S ON S.ID = D.ID --Case 2: LOOP JOIN HINT SELECT S.* INTO #Results FROM #Driver AS D INNER LOOP JOIN SampleTable AS S ON S.ID = D.ID SampleTable有100万行,其PK为ID。 临时表#Driver只有一列,ID,没有索引和5万行。 我一直发现以下内容: 情况1: SampleTable Hash …
15 sql-server 

4
Mac上的SQL Server
可以在OS X上安装SQL Server Engine Express Edition吗?我在家中使用MacBook,并希望将其用作SQL Server的测试/学习平台。

1
为什么顶级数据库平台中没有无符号整数类型?
数据库通常是非常可定制的,具有不同的数据类型和自定义长度。 当我尝试寻找使用unsigned intPostgreSQL和MS SQL Server都不提供的类型的语法时,这让我感到惊讶。MySQL和Oracle似乎。 在他们看来,这似乎是一个明显的遗漏-下一个最好的perfomant选项是long / bigint(8字节整数),但可能完全不必要!有谁知道为什么他们会选择不包括本地unsigned int支持?

3
SQL Server未使用所有CPU内核/线程
升级SQL Server的硬件后,我们在Windows任务管理器中注意到SQL实例仅使用了可用线程的一半: 。 该服务器具有以下硬件和软件: Windows 2008 R2企业版64位SP1 Intel Xeon E7-4870-4个处理器(40核,80线程) Microsoft SQL Server 2012企业版(64位) 运行select cpu_count from sys.dm_os_sys_info返回40。 操作系统可以看到所有80个线程。 为什么只使用服务器一半的处理能力? 我们在两台服务器上具有相同的硬件和软件,并且它们都表现出相同的行为。

3
优化CTE层次结构
在下面更新 我有一个具有典型acct /父帐户体系结构的帐户表来表示帐户层次结构(SQL Server 2012)。我使用CTE创建了一个VIEW,以散列层次结构,总的来说,它可以按预期的方式很好地工作。我可以在任何级别查询层次结构,并轻松查看分支。 需要根据层次结构返回一个业务逻辑字段。每个帐户记录中的一个字段描述了企业的规模(我们将其称为CustomerCount)。我需要报告的逻辑需要从整个分支汇总CustomerCount。换句话说,给定一个帐户,我需要对该帐户以及层次结构中该帐户下方每个分支中的每个子级的客户计数值进行汇总。 我使用CTE中内置的层次结构字段成功计算了该字段,该字段类似于acct4.acct3.acct2.acct1。我遇到的问题只是使其运行速度很快。如果没有这一计算字段,查询将在约3秒内运行。当我在计算字段中添加时,它变成一个4分钟的查询。 这是我能够想到的最佳版本,它可以返回正确的结果。我正在寻找有关如何在不牺牲性能的前提下重新构建此“视图”的想法。 我知道这种方法运行缓慢的原因(需要在where子句中计算谓词),但是我想不出另一种方法来构造它并仍然得到相同的结果。 这是一些示例代码,用于构建表并完全按照其在我的环境中的工作方式执行CTE。 Use Tempdb go CREATE TABLE dbo.Account ( Acctid varchar(1) NOT NULL , Name varchar(30) NULL , ParentId varchar(1) NULL , CustomerCount int NULL ); INSERT Account SELECT 'A','Best Bet',NULL,21 UNION ALL SELECT 'B','eStore','A',30 UNION ALL SELECT 'C','Big Bens','B',75 UNION ALL …

2
如何使用执行计划优化T-SQL查询
我有一个SQL查询,过去两天我一直在尝试使用试错法和执行计划进行优化,但无济于事。请原谅我这样做,但我将在此处发布整个执行计划。我已尽力使查询和执行计划中的表名和列名通用化,以简化和保护我公司的IP。可以使用SQL Sentry Plan Explorer打开执行计划。 我已经做了相当多的T-SQL,但是使用执行计划来优化查询对我来说是一个新领域,并且我确实试图理解如何做到这一点。因此,如果有人可以帮助我并解释如何解释该执行计划以在查询中找到优化它的方法,我将永远感激不已。我还有许多要优化的查询-我只需要一个跳板就可以帮助我解决第一个问题。 这是查询: DECLARE @Param0 DATETIME = '2013-07-29'; DECLARE @Param1 INT = CONVERT(INT, CONVERT(VARCHAR, @Param0, 112)) DECLARE @Param2 VARCHAR(50) = 'ABC'; DECLARE @Param3 VARCHAR(100) = 'DEF'; DECLARE @Param4 VARCHAR(50) = 'XYZ'; DECLARE @Param5 VARCHAR(100) = NULL; DECLARE @Param6 VARCHAR(50) = 'Text3'; SET NOCOUNT ON DECLARE @MyTableVar TABLE …

2
供应商希望每5分钟运行一次MSDB作业以进行业务应用程序
我们有一个第三方供应商试图将两个数据库都驻留在我们的SQL Server实例上的两个不同的应用程序与150多个其他数据库进行集成,并且他们想创建一个MSDB作业,以每5分钟“同步”这两个不同的应用程序(首先,他们想每分钟运行一次)。 我最初的直觉是,他们应该以Windows计划的作业,或者甚至是可怕的触发器(在这种情况下通常采用这种方法)在Application层中以某种方式执行此操作。 我宁愿尽可能多地为DBA任务保留MSDB作业,以减少混乱,而且在查看具有此类活动的超级作业时的作业历史时,MSDB的查询速度也很慢(这也会淹没和丢弃重要的作业历史)更重要的事情,例如备份历史)。但是话又说回来,也许我的首选项是错误的,我需要在MSDB中为应用程序层腾出一些空间,并袖手旁观,解决工作历史记录的问题,因为当我需要保留更多历史记录条目来捕获工作记录时,这些问题会永远载入重要内容,例如备份(或清除超级活动作业条目)。 我遇到的另一个问题是,当他们通过GUI执行升级时,我现在需要给该供应商“ sysadmin”权限,而不是仅对他们的DB授予“ dbo”权限,并希望他们不要破坏我的关键任务实例数据库是(整合的缺点之一)。 我想我可以把它们放在另一个“分离”的情况下,我们把所有的不玩好供应商,但这时我们就需要重新配置应用程序以指向新的SQL实例(叹可惜在这种情况下,不平凡的)。 供应商已经回避了我的担忧,谈论触发器的糟糕程度。因此,我对此进行了“搜索”,然后空了出来。有没有人看到任何链接“权威的外观”,这是一个坏主意,我可以推荐给他们?还是我应该接受他们的方法? 我不相信在寻求帮助之前我从未在sql论坛中发布过,所以希望我的查询框架正确。 编辑:我们正在运行SQL Server 2008 Enterprise R2 x64 SP1(感谢您指出我忘记提及版本!)。嗯,希望他们在使用新版本时不需要更改MSDB升级脚本。 谢谢你的时间!丰富

6
SQL Server 2012慢于2008
我将大型网站和数据库从旧服务器(Windows 2008 / SQL Server 2008/16 GB RAM / 2 x 2.5 GHz四核/ SAS磁盘)迁移到了更好的新服务器(Windows 2008 R2 / SQL Server 2012 SP1 / 64 GB RAM / 2 x 2.1 GHz 16核处理器/ SSD磁盘)。 我分离了旧服务器上的数据库文件,将它们复制并附加到新服务器上。一切进展顺利。 之后,我将兼容性级别更改为110,更新了统计信息,并重建了索引。 令我感到非常失望的是,我注意到,在新的SQL 2012服务器上,大多数SQL查询的速度要比旧的SQL 2008服务器慢得多(慢2-3-4倍)。 例如,在具有约70万条记录的表上,在旧服务器上,对索引的查询花费了约100毫秒。在新服务器上,相同的查询大约需要350毫秒。 所有查询都一样。 我会在这里有所帮助。让我知道要检查/验证的内容。因为我很难相信,在具有更新的SQL Server的更好的服务器上,性能会更差。 更多细节: 内存设置为最大。 我有此表和索引: CREATE TABLE [dbo].[Answer_Details_23]( [ID] [int] IDENTITY(1,1) …

3
为什么OFFSET…FETCH与旧式ROW_NUMBER方案之间的执行计划有所不同?
OFFSET ... FETCHSQL Server 2012引入的新模型提供了简单,快速的分页。考虑到两种形式在语义上是相同且非常普遍的,为什么根本没有区别? 人们会假设优化器可以识别这两者,并(最大程度地)优化它们。 这是一个非常简单的情况,OFFSET ... FETCH根据成本估算,速度提高了约2倍。 SELECT * INTO #objects FROM sys.objects SELECT * FROM ( SELECT *, ROW_NUMBER() OVER (ORDER BY object_id) r FROM #objects ) x WHERE r >= 30 AND r < (30 + 10) ORDER BY object_id SELECT * FROM #objects ORDER BY …


3
按范围返回每个日期的列
假设我有表A:BookingsPerPerson Person_Id ArrivalDate DepartureDate 123456 2012-01-01 2012-01-04 213415 2012-01-02 2012-01-07 我需要用以下视图实现: Person_Id ArrivalDate DepartureDate Jan-01 Jan-02 Jan-03 Jan-04 Jan-05 Jan-06 Jan-07 123456 2012-01-01 2012-01-04 1 1 1 1 213415 2012-01-02 2012-01-07 1 1 1 1 1 1 该系统用于举办活动,因此每次酒店预订可能需要1到15天之间的任何时间,但最多不过。任何想法将不胜感激。

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.