标签: sql-server

如何在离线机器上安装 SQL Server PowerShell 模块?

我有一些 SQL Server 机器无法连接到任何外部站点。

我在管理数据库时越来越多地使用 PowerShell,所以我肯定需要安装这个模块,以便我可以使用我的 PowerShell 例程。

事实证明,在这些离线机器上安装 SQL Server 模块很困难。

当我尝试安装模块时:

在此处输入图片说明

SqlServer模块要求提供NuGet 模块包

在此处输入图片说明

然后我得到了这片红色字母的海洋和以下错误消息,如下图所示:

警告:无法从 URI“ https://go.microsoft.com/fwlink/?LinkID=627338&clcid=0x409 ”下载到“”。

警告:无法下载可用提供程序的列表。检查您的互联网连接。PackageManagement\Get-PackageProvider:无法找到包提供程序“NuGet”。

它可能尚未导入。尝试“Get-PackageProvider -ListAvailable”。

在 C:\Program Files\WindowsPowerShell\Modules\PowerShellGet\1.0.0.1\PSModule.psm1:7415 char:30 + ... tProvider = PackageManagement\Get-PackageProvider -Name $script:NuGet ...

在此处输入图片说明

此 PowerShell 模块安装的解决方法是什么?

sql-server powershell installation automation patching

9
推荐指数
1
解决办法
6287
查看次数

EXCEPT & INTERSECT:逻辑计划中被动投射的目的

下面的 EXCEPT 查询生成一个带有看似无目的投影的逻辑计划。INTERSECT 也会发生这种情况。

投影的目的是什么?例如,是否有不同的 EXCEPT 查询,其中外投影会指定某些内容?

询问:

use AdventureWorks2017

select p.ProductId
from Production.Product as p
except
select pinv.ProductID
from Production.ProductInventory as pinv
option (recompile, querytraceon 8605, querytraceon 3604)
Run Code Online (Sandbox Code Playgroud)

转换树:

    LogOp_Select

        LogOp_GbAgg OUT(QCOL: [p].ProductID,) BY(QCOL: [p].ProductID,)

            LogOp_Project -- << ?? PASSIVE PROJECTION ??

                LogOp_Project

                    LogOp_Get TBL: Production.Product(alias TBL: p) Production.Product TableID=482100758 TableReferenceID=0 IsRow: COL: IsBaseRow1000 

                    AncOp_PrjList 

                AncOp_PrjList 

            AncOp_PrjList 

        ScaOp_Exists 

            LogOp_Select

                LogOp_Project

                    LogOp_Get TBL: Production.ProductInventory(alias TBL: pinv) Production.ProductInventory TableID=914102297 TableReferenceID=0 IsRow: COL: IsBaseRow1001 

                    AncOp_PrjList 

                ScaOp_Comp x_cmpEq

                    ScaOp_Identifier QCOL: [p].ProductID

                    ScaOp_Identifier QCOL: …
Run Code Online (Sandbox Code Playgroud)

sql-server optimization database-internals except

9
推荐指数
2
解决办法
533
查看次数

将任何数据库还原到 Azure MI 失败

我们新配置的 Azure SQL 托管实例无法从 URL 还原备份。

根据服务器日志,恢复本身似乎在一定时间后完成,但后续过程中的错误导致整个过程终止......

SSMS提示的错误信息是

消息 22003,级别 16,状态 1,第 7 行
由于数据库关闭,数据库 ID '5' 的陈旧/中止版本清理被中止。
消息 3013,级别 16,状态 1,第 7 行
RESTORE DATABASE 异常终止。

服务器日志的相关部分可以在这里找到。

我尝试了来自不同 SQL Server 版本(2012、2016、2019)的备份文件——即使是空数据库的备份也会导致这个错误......

有没有人经历过类似的事情?谷歌似乎根本没有帮助。

使用的命令是:

RESTORE DATABASE Test FROM  URL = N'https://STORAGEACCOUNT.blob.core.windows.net/STORAGECONTAINER/Test.bak'   
Run Code Online (Sandbox Code Playgroud)

通过以下方式创建了必要的凭据:

CREATE CREDENTIAL [https://STORAGEACCOUNT.blob.core.windows.net/STORAGECONTAINER]
WITH IDENTITY = 'SHARED ACCESS SIGNATURE',
SECRET = 'sv=xxxxxxxxxxxxxxxxxxxxxx';  
Run Code Online (Sandbox Code Playgroud)

我删除STORAGECACCOUNTSTORAGECONTAINER以及大多数的SECRET

sql-server restore azure-sql-managed-instance

9
推荐指数
2
解决办法
2395
查看次数

为什么 SQL Server Express 的实例名称会发生​​变化?

我正在使用一个网络应用程序

SQL Server Express(Microsoft SQL Server 2016 (SP1) (KB3182545) - 13.0.4001.0 (X64) 2016 年 10 月 28 日 18:17:30 版权所有 (c) Microsoft Corporation Express Edition(64 位),Windows 10 Pro 6.3(内部版本 18362) :))。

Web 应用程序正在使用连接字符串连接到数据库。在搜索了几天的正确连接字符串格式后,我设法找到了格式,使用 Nik 在这篇博客文章中描述的方法,它是:

Data Source = np:\\.\pipe\LOCALDB#A9DE3E14\tsql\query; Initial Catalog = MyDataBaseCatalog; User ID = myuser; Password=mypassword;
Run Code Online (Sandbox Code Playgroud)

昨天一切正常,但今天它停止了。我发现服务名称已更改为:

LOCALDB#B87CB983
Run Code Online (Sandbox Code Playgroud)

用连接字符串中的新服务名称替换实例名称后,Web 应用程序运行良好,但这不是可接受的解决方案。

你能告诉我为什么实例名称会改变吗,是否有任何 Express 版本限制?如何将名称配置为永久?

sql-server sql-server-express

9
推荐指数
1
解决办法
651
查看次数

2019 Enterprise - 没有 NOLOCK 的 NOLOCK,tempdb 上的页面闩锁超时,最后是转储

我们在 2 台新物理机上的新 SQL Server 2019 有一个非常奇怪的问题:

基础结构:在 2 台新物理机(用于 AlwaysOn 副本)上开始新安装 SQL Server 2019 Enterprise(Windows Server 2019 Standard 10.0 / Build 17763 上的 15.0.2000.5 / X64)。新机器是联想:

  • ThinkSystem SR630 – [7X02CTO1WW]
  • 1 个 CPU:1 个 Xeon Gold 6208U – 2.90 Ghz(16 核 x 2 – 超线程)
  • 256 Gb 内存 (32 Gb x 8)

该问题系统地出现在 2 台新机器上......

测试:产生故障的测试如下:

  1. 创建数据库
  2. 扩大数据库文件并切换到简单恢复模式
  3. 表的创建
  4. 用 100 万行填充表格
  5. 测试请求的执行(聚合时间间隔的计算 - 折叠)

正是最后一个查询(执行了近 10 次)经常导致出现以下消息的错误:

消息 601,级别 12,状态 1,行……由于数据移动,无法使用 NOLOCK 继续扫描。

当然,我们从未实现过NOLOCK提示或 …

sql-server dump tempdb sql-server-2019

9
推荐指数
1
解决办法
357
查看次数

SQL Server 2019 自适应连接性能不佳

我将SQL Server从2016年升级到2019年,我的查询的查询计划改变了,它使用了自适应连接,但不幸的是查询的持续时间从1秒增加到1分钟,我改变了连接顺序,问题解决了

T-SQL 代码:

SELECT TOP 100 * FROM dbo.APP App
JOIN dbo.PRS p ON App.PartyId=p.PRSId
LEFT JOIN dbo.Country ON p.NationalityId = dbo.Country.CountryId 
LEFT JOIN dbo.EDUBranch b ON app.EducationBranchId=b.EDUBranchId
Run Code Online (Sandbox Code Playgroud)

它的查询计划:https : //www.brentozar.com/pastetheplan/?id=H1cFQxwdP

更改连接顺序后:

SELECT TOP 100 * FROM dbo.APP App
LEFT JOIN dbo.EDUBranch b ON app.EducationBranchId=b.EDUBranchId
JOIN dbo.PRS p ON App.PartyId=p.PRSId
LEFT JOIN dbo.Country ON p.NationalityId = dbo.Country.CountryId
Run Code Online (Sandbox Code Playgroud)

它的查询计划:https : //www.brentozar.com/pastetheplan/?id=SJv1GlPdv

有没有人知道

  1. 为什么自适应连接会导致查询变慢?
  2. 改变连接顺序如何改变执行计划?

sql-server adaptive-joins query-performance

9
推荐指数
1
解决办法
245
查看次数

在 SQL Server 上构建执行计划花费的时间太长

我有一个 SQL Server 2014 实例 (12.0.2000.8) 和一个非常复杂的 SELECT 语句,大约有 20 个连接。此查询在 PostgreSQL、Oracle 和其他数据库上的相同数据集上运行良好,整个执行大约需要 1 分钟。

但在 SQL Server 上大约需要 40 分钟。我试图查看执行计划并开始等待……我试图通过从应用程序会话执行查询来获取执行计划,但没有执行计划。

然后我得到了查询,在SQL Server Management Studio中询问“显示估计的执行计划”,我也开始等待。所以,看起来仅仅构建执行计划就花费了太多时间。所有统计数据都是用“exec sp_updatestats”收集的,我在 sys.stats 中检查了它 - 一切看起来都很好。所有索引都已就位。

我评论了所有的连接并开始一一取消注释,然后

  SET STATISTICS TIME ON
Run Code Online (Sandbox Code Playgroud)

显示每个未注释的连接都需要更长的时间来解析,例如 13 个连接的时间:

SQL Server parse and compile time:
   CPU time = 32250 ms, elapsed time = 32729 ms.
Run Code Online (Sandbox Code Playgroud)

所以,这绝对是一个解析问题。

select count(*) from sys.index_columns
where object_id in (OBJECT_ID('tables_names'),...')
Run Code Online (Sandbox Code Playgroud)

说有 128 列,当

select * from sys.indexes
where object_id in (OBJECT_ID('tables_names'),...')
Run Code Online (Sandbox Code Playgroud)

返回带有 HEAP、CLUSTERED、NONCLUSTERED 索引的 43 行。

你能推荐看什么吗?为什么要解析这么多? …

sql-server optimization execution-plan sql-server-2014

9
推荐指数
2
解决办法
778
查看次数

在单行 INSERT 语句期间围绕 SOS_SCHEDULER_YIELD 行为的实例性能变化

我在 VM 中有一个共享的 SQL Server 2016 开发实例,与(应该是)相同 VM 上的共享 SQL Server 2012 开发实例相比,该实例的 INSERT 性能较差。它与我的本地 SQL Server 2016 开发实例相比也很差,因此我目前假设该实例存在一些古怪的问题,因为该服务器上的大多数其他操作似乎相当稳定。

它们是以下形式的 1000 个单独的插入语句:

INSERT INTO tblname (columnlist) VALUES (literals);

没有明确的交易。

我将这些 INSERT 包装在扩展事件中,以便我可以看到一些环境之间的差异。我还制作了一个运行循环而不是文字的版本。循环的性能在受影响的系统上明显不同,我不包括下面的循环版本代码 - 它执行一致,但在执行该脚本之前我确实删除并重新创建了数据库,结果也包括在内。

我已将系统设置为可重现并轻松推送到任何系统进行比较。我正在运行命令脚本和 sqlcmd 中的所有内容。首先运行安装脚本以创建数据库、表和 XE 会话。然后运行第二个脚本,启动跟踪,执行 1000 条 INSERT VALUES 语句,停止跟踪并使用https://www.sqlskills.com/blogs/paul/capturing-wait-stats-for-a-single-显示结果手术/

我已经注意到这个特定的 SQL Server 2016 在 SOS_SCHEDULER_YIELD 周围有非常不同的特征,我想知道这是否已经指出潜在的问题可能是什么。此外,我似乎已将此问题与在此服务器上的默认值中使用 GETDATE 和 GETUTCDATE 隔离开来。

性能测试.cmd:

DEL *.xel
echo Running setup.sql
sqlcmd -o "setup.sql.output-1.txt" -I -b -l 120 -t 300 -S %SQLINSTANCE% -U sa -P %PASSWORD% -d …
Run Code Online (Sandbox Code Playgroud)

sql-server wait-types

9
推荐指数
1
解决办法
206
查看次数

链接服务器连接开始失败,并出现“无法生成 SSPI 上下文... SQL Server 网络接口:登录尝试失败”错误?

问题

我在同一个域中有两个 SQL Server 2016 标准版服务器。ServerA有两个链接服务器连接设置到ServerB

第一个链接服务器连接使用专用的远程SQL 登录安全上下文。那个一直是并且仍然工作正常。

第二个连接使用“登录的当前安全上下文”,它是ServerA 上的Windows 身份验证 (AD) 登录。直到今天,这也运行良好。

今天突然间,连接到 ServerA 然后尝试运行使用第二个链接服务器连接的查询的每个人最终都会遇到以下错误:

链接服务器“LinkedServerName”的 OLE DB 访问接口“SQLNCLI11”返回消息“无法生成 SSPI 上下文”。消息 -2146893044,级别 16,状态 1,第 0 行 SQL Server 网络接口:登录尝试失败

此外,用户目前可以直接连接到 ServerA 和 ServerB,甚至可以直接对 ServerB 上的对象执行查询,但是当他们尝试通过 ServerA 上的链接服务器运行引用 ServerB 上相同对象的查询时,这是唯一一次他们得到上述错误,目前。


相关信息

这是我们目前看到的SPN和日志(抱歉所有混淆):

ServerB 成功的 SPN 注册 SQL 日志:

ServerA SQL 日志

ServerB 成功的 SPN 注册 SQL 日志:

ServerB SQL 日志

  • 请注意,两台服务器都为自己的端口 1433 和未指定端口成功注册了 SPN。

ServerA 注册的 SPN:

ServerA 注册的 SPN

  • 我不确定第二个“CN=”行(倒数第二行)是什么,但它的字面意思是“CN=ServerASvc”,但这不是 SQL 服务帐户的名称。SQL 服务帐户是“SQLServiceAccount1”。
  • 我也不确定为什么最后一行只有服务器名称“ServerA”的 SPN(我们的 DC 中确实有一个 Host/CName),但对于前面的一行来说似乎是多余的。 …

sql-server linked-server errors sql-server-2016 logon

9
推荐指数
2
解决办法
657
查看次数

SQL Server 实例如何恢复使用的内存

我知道这个问题可能已经回答了很多次了,但我需要一个更好的方法来解决它,或者向我的老板证明这是一种正常行为,或者我忽略了一些东西。

我不是 DBA,我是一名开发人员,就像我以前的工作一样,我必须担任 DBA Mantle,因为我们现场没有正式的 DBA,或者没有人想认真对待这件事。

我有三个 SQL Server 实例,一个使用 SQL 2008 R2,两个使用 SQL 2016。全部来自生产环境。

SQL 2008 R2 来自我们的主系统,它托管在 Hyper-V 中的虚拟服务器中,并且是专用数据库服务器。该服务器上没有分配其他应用程序,它是一个纯数据库服务器。

问题是服务器配置了 30 GB 的 RAM,而 SQL Server 配置为使用从最小 4 GB 到最大 22 GB。

}内存参数配置

如果我重新启动,显然服务器内存使用量在服务器性能管理器上趋于平缓,从使用的内存中释放内存到配置的最小值。

重启后内存

我需要帮助理解这种情况,因为所有文档都指向一个无可辩驳的事实,即这在 SQL Server 中是正常的,我已经对此进行了记录,但是我的老板和同事表示这不是数据库的正常行为。如果我做数字,我认为服务器正在请求更多内存。他们说这不是 SQL Server 的正常行为,而且我们忽略了一些东西(工作和其他东西)。为了监控或尝试确定服务器行为,我开始每两个小时发送一次数据库健康报告,以尝试检查发生了什么。对于他们来说,预期的行为是 SQL Server RAM 应该在性能图中上升和下降,而不是一直保持在顶部,据我了解,这是预期行为或 SQL Server 的设计。

数据库健康报告

但是在不同的时间点,作业上升到执行,并且它们正常完成,一些长时间运行的事务正在运行,但是当我在生成报告后为它们运行查询时,它们消失了。

有什么我忽略的吗?这是正常的吗?有没有办法在不重启实例的情况下释放内存?我已经尝试了很多解决方案

sql-server-2008 sql-server memory

9
推荐指数
2
解决办法
598
查看次数