标签: sql-server

在 Linux 中获取“sqlcmd sqlcmd: command not found”?

每当我跑步时,sqlcmd我都会收到“找不到命令”

sqlcmd -S localhost -U SA -P '<YourPassword>'
sqlcmd: command not found
Run Code Online (Sandbox Code Playgroud)

我该如何解决?

sql-server ubuntu sql-server-2017

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

大多数查询计划在过去 4 小时内重新创建

我的 SQL Server 数据库的性能有问题。我找到了这个工具sp_BlitzCache。命令执行后,我得到了这个语句:

您在过去 24 小时内创建了 92.00% 的计划,在过去 4 小时内创建了 92.00%。

虽然我发现了问题(使用 SQL Server Profiler,我检查了 StmtRecompile 事件发生),但我只能找到几个经常重建的全文搜索查询。但是,全文搜索查询仅占所有查询的 5% 左右。

您有什么建议可能会导致其余 87% 的计划重新创建?

我有 SQL Server 2012(版本 11.0.6567.0)。

编辑:我添加了我的性能计数器

+---------------------------+--------------------------------+--------------+
|        object_name        |          counter_name          |  cntr_value  |
+---------------------------+--------------------------------+--------------+
| SQLServer:Buffer Manager  | Background writer pages/sec    |            0 |
| SQLServer:Buffer Manager  | Buffer cache hit ratio         |        28436 |
| SQLServer:Buffer Manager  | Buffer cache hit ratio base    |        28436 |
| SQLServer:Buffer Manager  | Checkpoint pages/sec           | …
Run Code Online (Sandbox Code Playgroud)

performance sql-server sql-server-2012 sp-blitzcache query-performance

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

SSMS 和注册服务器结果

背景

我们正在尝试为我们的一个支持团队创建一个 AG“是主要的”测试工具。不知道在任何给定时间哪些服务器将是主服务器,它们被指示对注册的服务器组执行 TSQL。注册服务器组由AG中的所有服务器组成。目标是只在当前主服务器上执行 TSQL:

当前测试线束

IF EXISTS (SELECT *
FROM sys.dm_hadr_availability_replica_states AS HARS 
INNER JOIN sys.dm_hadr_availability_replica_cluster_states AS HACS ON HACS.replica_id = HARS.replica_id 
    WHERE (HARS.role_desc = 'PRIMARY') AND (HACS.replica_server_name LIKE @@SERVERNAME))
BEGIN
<<SOME CODE TO EXECUTE>>
END
Run Code Online (Sandbox Code Playgroud)

问题

如果响应多服务器查询的第一台服务器没有返回任何结果,SSMS 将假定正确的结果集没有结果集,即使其他服务器稍后返回结果集也是如此。因此,在这种情况下,不会返回任何结果……这是不正确的,也不是预期的功能。

谁能想出一种方法,使用 SSMS(这是 CS 团队最熟悉的工具),仅在当前主服务器上强制执行?

sql-server ssms t-sql

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

全文:在创建多个全文索引后,大量 FT_MASTER_MERGE 在 SUSPENDED 状态等待(服务器挂起)

我们对 SQL Server 2014 进行了测试,当时我们有 10 个数据库,每个数据库中有 100 个不同的架构,每个架构中有 10 个小(约 50 行)表(总共 10K 个表),我们在所有这些上创建了全文索引所有这些数据库中的表同时存在。

几分钟后,我们发现 SQL Server 停止接受任何连接(ADMIN:.连接除外)。如果我们重新启动服务器,我们可以连接,但过一段时间它又挂了。经过一番调查,我们发现它是由于消耗了所有工作线程引起的,dm_os_tasks并且dm_os_waiting_tasks向我们展示了状态中有很多FT_MASTER_MERGE等待SUSPENDED。我们在谷歌上搜索“全文正在等待主合并操作”,但没有找到更多关于它的实际信息。

我们尝试了不同的全文目录配置:每个数据库一个目录,每个模式一个目录,每个索引一个目录。无论如何,服务器挂起所有这些挂起的任务。

等待的根本原因是什么,如何修复/缓解?

在如此大量的表格上启用全文的推荐方法是什么?

sql-server full-text-search sql-server-2014

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

无法确定元数据,因为语句调用了扩展存储过程

在 sql server 2012 中,我曾经通过获取 SP_HELP_JOB 的输出来查看作业

-- https://www.sqlservercentral.com/Forums/Topic259078-8-1.aspx
-- getting data from sp_help_job into a temp table
-- marcelo miorelli
-- 01-april-2013

IF OBJECT_ID('TEMPDB..#JOBiNFO') IS NOT NULL
   DROP TABLE #JobInfo

IF OBJECT_ID('TEMPDB..#ScheduleInfo') IS NOT NULL
   DROP TABLE #ScheduleInfo


SELECT * INTO #JobInfo
FROM OPENROWSET('sqloledb', 'server=(local);trusted_connection=yes'
, 'set fmtonly off exec msdb.dbo.sp_help_job -- @execution_status=4')


SELECT * INTO #ScheduleInfo
FROM OPENROWSET('sqloledb', 'server=(local);trusted_connection=yes'
, 'set fmtonly off  exec msdb.dbo.sp_help_schedule')
Run Code Online (Sandbox Code Playgroud)

现在在 sql server 2016 上这不起作用。

我收到此错误消息:

消息 11520,级别 16,状态 1,过程 sp_describe_first_result_set,第 1 …

sql-server dynamic-sql jobs openrowset sql-server-2016

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

使用 # 的 SQL 服务器临时表 - 是否只能通过包含具有相同登录名的多个连接的查询访问?

假设我们有 2 个完全不同的查询,它们引用了一个同名的临时表:

查询一 .... 操作:#tempTableName

查询二 .... 操作:#tempTableName

我对此进行了研究,发现“#temp 是一个本地临时表,因此对其他连接不可见”,但是我不确定连接在 SQL 查询上下文中的真正含义。SQL 是否认为每个运行的单独查询都有一个单独的“连接”,或者连接是否以某种方式共享?

具体来说,我的问题是“如果我的场景中的两个查询被同一个登录名访问会发生什么”,例如多个 .NET 应用程序使用相同的 .NET 连接字符串并同时访问数据库。如果我的场景中的两个查询同时运行,他们是否会潜在地访问同一个临时表?锁呢?我是否需要采取任何措施来防止在桌子上操作期间发生不必要的访问?

我看过这个答案,/sf/ask/32686321/,但是我真的需要像“假装我 6 岁”这样的解释,以便我我非常清楚在我的假设场景中发生了什么,就 SQL 查询究竟如何利用连接和确定独占访问等而言。任何可以让我完全掌握这一点的图表或资源指针都会很棒!

sql-server concurrency ado.net connections temporary-tables

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

为什么在我的分区视图上执行删除会导致聚集索引插入?

我有一个分区视图,其中包含以下插入触发器(可怜的 mans 分区)。当我执行 DELETE 时,我得到以下查询计划:

delete from factproductprice where pricedate = '20170725'
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

在视图上触发:

ALTER TRIGGER [dbo].[factProductPriceDelete] ON [dbo].[FactProductPrice]
INSTEAD OF DELETE AS
BEGIN
  IF @@ROWCOUNT = 0 RETURN;

  DECLARE @PriceDate DATE
  SELECT @PriceDate = CAST(PriceDate AS DATE) FROM DELETED
  IF @PriceDate BETWEEN '20140101' AND '20141231'
  BEGIN
    DELETE FROM dbo.FactProductPrice2014
    WHERE ProductId IN (SELECT ProductId FROM DELETED) AND SalesPriceSchemeId IN (SELECT SalesPriceSchemeId FROM DELETED) AND PriceDate IN (SELECT PriceDate FROM DELETED) 
  END
  IF @PriceDate BETWEEN '20150101' AND '20151231'
  BEGIN
    DELETE FROM …
Run Code Online (Sandbox Code Playgroud)

trigger sql-server execution-plan partitioning sql-server-2014

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

更改最大内存设置会使查询计划失效吗?

我最近将最大内存从默认(无限制)降低到 20 GB。这会清除计划缓存中最旧的查询吗?

sql-server memory configuration plan-cache sql-server-2016

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

了解 IAM 页面:范围间隔

我正在阅读 Itzik 的书“查询 Microsoft SQL Server 2012”以及在互联网上阅读/观看不同的教育材料。我的目的是对数据库内部的工作方式有一个有用的理解。

我有点怀疑我无法解决 IAM 页面。由于我处于我理解的早期阶段,我可能需要那些对它有更好了解的人的额外帮助,所以如果我的怀疑看起来很荒谬,请原谅我。

在第 15 章“实施索引和统计”中出现了一个图像 - 如下所示 - 作为 IAM 页面的示例:

示例 IAM 页面

您可以通过红色箭头看到与相同程度相关的 16 页。这怎么可能?这是作者/编辑的错误吗?或者更有可能的是:有什么我没有正确理解的吗?

我的另一个问题与页面间隔有关。为什么它们不相邻?以最后一个extent为例,它将覆盖id为336到22642的页面,或者前一个,296到328的页面。

sql-server storage-engine database-internals

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

sp_cursorprepexec 导致 5300 万次读取?

我们正在使用 SQL Server 2012 运行 Dynamics AX 2012 安装。我知道不应再使用游标,但 AX 正在使用它,我们无法更改此行为,因此我们必须使用它。

今天我发现了一个非常糟糕的查询,读取次数超过 5300 万次,执行时间超过 20 分钟。

我通过我们的监控工具 SentryOne 捕获了这个查询。

declare @p1 int
set @p1=1073773227
declare @p2 int
set @p2=180158805
declare @p5 int
set @p5=16
declare @p6 int
set @p6=1
declare @p7 int
set @p7=2
exec sp_cursorprepexec @p1 output,@p2 output,N'@P1 bigint,@P2 nvarchar(5),@P3 bigint,@P4 nvarchar(8),@P5 bigint,@P6 bigint,@P7 bigint,@P8 bigint,@P9 bigint,@P10 bigint,@P11 bigint,@P12 bigint,@P13 bigint,@P14 bigint,@P15 bigint,@P16 bigint,@P17 bigint,@P18 bigint,@P19 nvarchar(5),@P20 bigint,@P21 bigint,@P22 bigint,@P23 bigint,@P24 bigint',N'SELECT T1.PRODUCT,T1.EXTERNALVENDPARTY,T1.LIFECYCLESTATUS,T1.RECID,T2.ECORESPRODUCT,T2.ECORESDISTINCTPRODUCTVARIANT,T2.SGE,T2.ECORESREFORDERNUM,T2.ORDERNUM,T2.RECID,T3.ECORESREFORDERNUM,T3.NAME1,T3.NAME2,T3.NAME3,T3.RECID,T4.ECORESPRODUCT,T4.EXTERNALITEMID,T4.ECORESDISTINCTPRODUCTVARIANT,T4.RECID,T5.RECID,T5.PERSON,T6.RECID,T6.NAME,T6.INSTANCERELATIONTYPE,T7.RECID,T7.NAME,T7.INSTANCERELATIONTYPE,T8.PARTY,T8.ACCOUNTNUM,T8.RECID,T9.RECID,T9.DISPLAYPRODUCTNUMBER,T9.INSTANCERELATIONTYPE,T10.PRODUCT,T10.CATEGORY,T10.RECID,T11.RECID,T11.CODE,T11.NAME,T11.INSTANCERELATIONTYPE FROM INVENTTABLE T1 CROSS JOIN ECORESPRODUCTORDERNUM …
Run Code Online (Sandbox Code Playgroud)

performance sql-server cursors sql-server-2012 microsoft-dynamics performance-tuning

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