SQL Server 2019 已发布,但我似乎没有可供下载的 LocalDB 版本。有谁知道是否会发布 LocalDB 版本,或者 2017 年是否是最后一个版本?
DROP TABLE IF EXISTS #EmptyTable, #BigTable
CREATE TABLE #EmptyTable(A int);
CREATE TABLE #BigTable(A int);
INSERT INTO #BigTable
SELECT TOP 10000000 CRYPT_GEN_RANDOM(3)
FROM sys.all_objects o1,
sys.all_objects o2,
sys.all_objects o3;
Run Code Online (Sandbox Code Playgroud)
WITH agg
AS (SELECT DISTINCT a
FROM #BigTable)
SELECT *
FROM #EmptyTable E
INNER HASH JOIN agg B
ON B.A = E.A;
Run Code Online (Sandbox Code Playgroud)
这是我今天之前没有注意到的现象的简化再现。我对内部散列连接的期望是,如果构建输入为空,则不应执行探测端,因为连接不会返回任何行。上面的示例与此相反,并从表中读取了 1000 万行。这使查询的执行时间增加了 2.196 秒 (99.9%)。
OPTION (MAXDOP 1)执行计划从#BigTable. 该ActualExecutions是0对哈希连接内所有的运营商。SELECT * FROM #EmptyTable E INNER …
SQL Server 2019。这是 xml 计划要点的链接。
您好,我花了很长时间才明白为什么当它找不到包含其中一种状态的记录时,为什么这个查询需要 0.02 秒才能执行。当它找到具有包含状态之一的记录时,它往往要快得多。我猜这是因为一旦找到匹配的 1 行,查询就会停止。
SELECT TOP 1 IDNum,
FORMAT(Date, 'M/d/yy') AS theDate,
Status,
Rate
FROM theDB
INNER JOIN DomainTable
ON theDB.IDNum = DomainTable.IDNum
WHERE DomainIP = '127.0.0.1'
AND status IN ( 'Active', 'To ReActivate', 'To Deactivate', 'Deactivate ASAP',
'SUSPENDED', 'SUSPENDED X', 'SUSPENDED Y', 'SUSPENDED Z' )
ORDER BY theDB.IDNum DESC
Run Code Online (Sandbox Code Playgroud)
(DomainIP属于DomainTable,其他属于DB)
在执行计划中,最大的成本是 TOP N SORT,占 33% 聚集索引搜索占 29% 对 DomainTable 的键查找使用了 29% 在 DomainTable 上搜索 IP 的索引是 9%
我的问题是:
有没有办法让TOP N不那么重?
0.02 …
安装 CU2 后,我们的 SQL 服务器代理随机停止工作。如果您通过打开作业活动监视器来检查代理的状态,它会出现一段时间的空白,然后抛出错误:
无法检索此请求的数据。(Microsoft.SqlServer.Management.Sdk.Sfc)
如需帮助,请单击:https : //go.microsoft.com/fwlink?ProdName=Microsoft%20SQL%20Server&LinkId=20476
- - - - - - - - - - - - - - - 附加信息:
执行 Transact-SQL 语句或批处理时发生异常。(Microsoft.SqlServer.ConnectionInfo)
当前命令发生严重错误。结果,如果有的话,应该被丢弃。(Microsoft SQL Server,错误:0)
如需帮助,请单击:http : //go.microsoft.com/fwlink?ProdName=Microsoft%20SQL%20Server&ProdVer=15.00.4013&EvtSrc=MSSQLServer&EvtID=0&LinkId=20476
任何线索可能导致这种情况?
一元后给出了SQL的一个很好的片段
declare @search nvarchar(max) = ##searchfor:string?carefully %listen##
select id [Post Link]
, score
, creationdate
, lastactivitydate
, closeddate
, owneruserid as [User Link]
from posts
where body like concat('%', @search, '%') collate SQL_Latin1_General_CP1_CI_AI
or title like concat('%', @search, '%') collate SQL_Latin1_General_CP1_CI_AI
Run Code Online (Sandbox Code Playgroud)
双数字符号##在那里是什么意思?
我猜这是某种字符串语法,但我什至无法猜测它的关键字。谷歌搜索“SQL中的数字符号##”返回“前缀临时表”,事实并非如此。
将数据库从一个实例还原到另一个实例时,有时必须将 SQL Server 登录名重新链接到数据库用户。
这通常是通过以下程序之一来实现的。
use <database>
go
sp_change_users_login 'Update_one', '<datbase_user>', '<sql server login>'
go
Run Code Online (Sandbox Code Playgroud)
use <database>
go
ALTER USER [<datbase_user>] WITH LOGIN = [<sql server login>]
go
Run Code Online (Sandbox Code Playgroud)
这些命令会将孤立的数据库用户重新链接到相应的 SQL Server 登录名。
是否可以在不删除 SQL Server 登录名或数据库用户的情况下打破这种关系?
我已经查看了DMVsys.database_principals和sys.server_principalsDMV,但它们不可修改。
我今天对我的数据库进行了漏洞评估。我找到了 VA2108,它建议我
ALTER ROLE [db_owner] DROP MEMBER [dbo]
Run Code Online (Sandbox Code Playgroud)
但它是任何 SQL 实例的默认设置。
我应该去吗?有什么风险吗?
谢谢
security sql-server azure-sql-database vulnerability-assessment
我最近一直致力于了解存储在系统健康扩展事件事件文件中的数据或指标。
我们正在尝试使用此处提供的系统运行状况来实现性能指标的数据收集
有一些报告提供了从名为的系统运行状况事件收集的 CPU 利用率、其他进程利用率等指标
scheduler_monitor_system_health_ring_buffer_recorded
Run Code Online (Sandbox Code Playgroud)
对于一些繁忙的服务器,我无法理解为什么报告中列为 SQL CPU 利用率的字段“process_utilization”大部分时间都在 100 以上。在高峰时间,它在 120-160 之间变化,因此报告是始终显示 CPU 高于 100,即使当我从服务器活动监视器中检查时,情况并非如此。
我在 Github 中提出了这个问题,但似乎没有修复或回应。
因此,我的问题是
如何使用记录的系统运行状况环缓冲区获取服务器的 SQL CPU 利用率的准确数字?
报告还显示根据其报告计算的以下 2 个字段的计数器
100-System_idle-process_utilization 作为 OtherProcessUtil
100-system_idle 作为 SystemUtil
这些OtherProcessUtil和SystemUtil需要/有什么帮助?
其他工具(如 Idera 和 sentry [我测试过的])不会显示相同服务器的 CPU 使用率超过 100%。我对相同的负载进行了并排比较。
sql-server extended-events sql-server-2012 sql-server-2014 sql-server-2016
使用下面的示例,谓词是相同的,但是顶部语句(正确)返回 0 行,底部语句返回 1 - 即使谓词不匹配:
declare @barcode nchar(22)=N'RECB012ZUKI449M1VBJZ'
declare @tableId int = null
declare @total decimal(10, 2) = 5.17
SELECT 1
FROM
[dbo].[transaction] WITH (INDEX([IX_Transaction_TransactionID_PaymentStatus_DeviceID_DateTime_All]))
WHERE
Barcode = @barcode
AND StatusID = 1
AND TableID = @tableID
AND @total <= Total
SELECT 1
FROM
[dbo].[transaction]
WHERE
Barcode = @barcode
AND StatusID = 1
AND TableID = @tableID
AND @total <= Total
Run Code Online (Sandbox Code Playgroud)
为什么会发生这种情况?
更多信息:
Microsoft SQL Azure (RTM) - 12.0.2000.8 Dec 19 2018 …我有一台运行 SQL Server 实例的物理服务器。
我注意到这个服务器经常以 100% 的 CPU 使用率运行。
我的 IT 团队对此并不满意,并建议我们为操作系统保留 32 个内核中的 2 个。
这很好用,现在最大使用峰值略低于 90%。此外,不再报告来自不同用户的缓慢数据检索。
是否有任何理由不以这种方式使用 WSRM(Windows 系统资源管理器)而不是 SQL 资源调控器?
sql-server ×10
security ×2
columnstore ×1
installation ×1
parallelism ×1
permissions ×1
stack-exchange-data-explorer ×1
t-sql ×1
windows ×1