这个问题来自 SO,如果它移动到 DBA.SE ..
下面是测试数据:
--Main Table
CREATE TABLE [dbo].[LogTable]
(
[LogID] [int] NOT NULL
IDENTITY(1, 1) ,
[DateSent] [datetime] NULL,
)
ON [PRIMARY]
GO
ALTER TABLE [dbo].[LogTable] ADD CONSTRAINT [PK_LogTable] PRIMARY KEY CLUSTERED ([LogID]) ON [PRIMARY]
GO
CREATE NONCLUSTERED INDEX [IX_LogTable_DateSent] ON [dbo].[LogTable] ([DateSent] DESC) ON [PRIMARY]
GO
CREATE NONCLUSTERED INDEX [IX_LogTable_DateSent_LogID] ON [dbo].[LogTable] ([DateSent] DESC) INCLUDE ([LogID]) ON [PRIMARY]
GO
--Cross table
CREATE TABLE [dbo].[LogTable_Cross]
(
[LogID] [int] NOT NULL ,
[UserID] [int] NOT NULL
) …Run Code Online (Sandbox Code Playgroud) 我试图为我们的内部消耗选择一个层,并详细了解此限制。Azure SQL 数据库资源限制
一个特殊的问题实例如下图所示,并特别突出显示了值
正如您所看到的,从突出显示的内容来看,最大并发限制为 60 个并发登录和 600 个并发会话
问:
单个查询可以并行进行,并且可以有多个会话,这些会话会在此限制下计数吗?
我尝试使用 Paul White 的文章强制并行查询执行计划来测试这一点,如下所示
DBCC FREEPROCCACHE
DBCC SETCPUWEIGHT(1000)
GO
-- Query to test
some expensive query
GO
DBCC SETCPUWEIGHT(1)
DBCC FREEPROCCACHE
Run Code Online (Sandbox Code Playgroud)
或使用
OPTION (RECOMPILE, QUERYTRACEON 8649)
Run Code Online (Sandbox Code Playgroud)
但当我使用下面的 DMV 检查时,我最多只能进行 9 个会话
select * from sys.dm_os_tasks
where session_id=61
Run Code Online (Sandbox Code Playgroud)
这些跟踪标志和 DBCC 选项在 azure 中不起作用。如果我不清楚,请告诉我
这个问题以前可能有人问过,但我尝试用“SQL Server 是否可以对同一查询使用两个索引”这一术语进行搜索,但没有产生任何结果。
假设您有以下查询:
select col1a,colb
from #ab
where col1a in (
Select col1a from #ab
group by col1a
having count (distinct colb)>1)
Run Code Online (Sandbox Code Playgroud)
你有以下索引:
create index nci on #ab(colb)
include(col1a)
Run Code Online (Sandbox Code Playgroud)
这是执行计划,以及粘贴计划链接。
计划的底部用于以下查询:
Select col1a from #ab
group by col1a
having count (distinct colb)>1
Run Code Online (Sandbox Code Playgroud)
表扫描/计划的顶部用于以下查询:
select col1a,colb
from #ab
where col1a in (
Run Code Online (Sandbox Code Playgroud)
题:
如果我有如下索引:
create index nic_toppart on #ab(Col1a,colb)
Run Code Online (Sandbox Code Playgroud)
它会被选为计划的顶部吗?
总之,我的意思是:
SQL Server 可以使用索引nci对计划的部分/底部进行分组,并将索引nic_toppart用于计划的顶部吗
这可能吗?
我的测试表明它只能选择一个。
下面是测试数据。如果我不清楚,请告诉我。
create table #ab
(
col1a int,
colb …Run Code Online (Sandbox Code Playgroud) 我们在 SQL Server 2008 数据库上启用了一种方式的事务复制。由于一些问题,我们不得不运行DBCC checkDB,将数据库带入单用户模式。当我们完成DBCC活动并再次启用复制时,复制将不起作用。我们必须再次初始化快照才能使复制工作。
你能帮我理解为什么复制在这种情况下会中断吗?我理解DBCC删除表中的一些行和索引,但根据我的理解,当我们启用复制时,这些更改应该传播给订阅者而不会出现任何问题。
当我与我的高级团队成员核对时,我被告知这是由于 LSN 不匹配,但我无法从逻辑上理解。
任何帮助深表感谢。
将生成多少日志索引重建。我记得读取重建索引应该生成与表大小相同数量的日志文件。但我的测试显示并非如此。我们需要这个估计,因为我们正在尝试构建 azure 数据库索引,它有一个限制最大 2 GB。
我的数据库处于完全恢复模式。
桌子尺寸:

日志大小:

从图片中您可以看到在线索引重建操作的日志生成量非常少。如果我遗漏了什么,有人可以纠正我吗
这是@martin smith 优秀答案的后续问题/sf/ask/87614551/
在那之后,我观看了 Paul randal 的 MCM 视频,该视频说明了为什么索引碎片在仅对大表的大型扫描中更重要。 ..
假设我有一个大表和身份作为聚集键,并且没有对聚集键进行更新,并且所有页面都按逻辑顺序排列,Sql 是否保证所有这些页面都非常靠近磁盘... ,但在那之后许多插入也可能发生在其他表上,所以数据可能不会很接近......我的理解是否正确?
我们试图排除名称类似于“%backup%”或“%WI%”的存储过程。
这是我使用的总查询..
;WITH CTE
AS
(select object_name(object_id) as procname
from sys.sql_modules
where definition LIKE '%CTLEMPLOYEE%' and ( object_name(object_id) NOT LIKE '%BACKUP%'
or object_name(object_id) not like '%backup%'
OR object_name(object_id) NOT LIKE '%Wi%')
)
SELECT * FROM CTE
Run Code Online (Sandbox Code Playgroud)
上述查询的示例输出:
report_spBIHRRecruitmentReport_Phase2_backup
但奇怪的是上面的查询返回结果仍然有名字
一样
。备份
2.Wi
然后我尝试使用 collate 来限制结果之类的结果..
;WITH CTE
AS
(select object_name(object_id) as procname
from sys.sql_modules
where definition LIKE '%CTLEMPLOYEE%' collate SQL_Latin1_General_CP1_CI_AS
and ( object_name(object_id) NOT LIKE '%BACKUP%'
or object_name(object_id) not like '%backup%'
OR object_name(object_id) NOT LIKE '%Wi%' collate SQL_Latin1_General_CP1_CI_AS
))
SELECT …Run Code Online (Sandbox Code Playgroud) 我们很少有查询每 5 秒将它们的状态检查到一个表中并更新它们的状态。
下面是查询的样子(所有表列都在更新查询中)
update table1
set
Name='somename'
DetailMessage='Error'
LastUpdate=getdate()
where id=14
Run Code Online (Sandbox Code Playgroud)
最近这个表遇到了阻塞问题,上面的更新查询是主要的阻塞器。当我运行时Sp_Blitzindex,它显示没有丢失的索引,284 分钟的行锁争用..
以下是我到目前为止所做的几个步骤.. 1.
确保外键被索引(它们也是主键)
2.为可以从新索引中受益的选择语句创建索引,以便减少对该索引的锁争用
3.我还将 Fillfactor 减少到 10,以前每页用于存储 93 行,现在它每页只存储 7 行(仍然无法给自己一个 100% 的逻辑解释,说明此更改将如何帮助...)
任何进一步的建议..如果您需要任何进一步的细节,请告诉我
下面是表的架构(更改的列名),表只有 350 行,查询以每 5 秒 20/30 次查询的频率更新此表...
create table dbo.table1
(
[ID] [int] NOT NULL,
[Name] [varchar](500) NULL,
[DetailMessage] [nvarchar](max) NOT NULL ,
[LastUpdate] [datetime] NOT NULL
)
Run Code Online (Sandbox Code Playgroud)
PS:这是第三方查询,我们无法通过更改隔离级别等更改来修改源数据库...我只能添加索引
SQl 版本:SQl 2012