批处理作业错误电子邮件报告:
数据库“WebDB”的事务日志已满。
不,不是。它 90% 免费。事务日志备份正常运行。我的硬件人员告诉我硬件运行良好,有足够的空间。SQL Server 2008 SP3,但不是 R2。
我是一名开发人员,我们不再有 DBA。所以我有责任尝试解决这个问题。
我是 CTE 的忠实粉丝。他们是最棒的。你知道,我知道,我们都知道。
今天,如果将 CTE 写入真实表,我的查询速度会提高 1000 倍左右。
查询本身在链接中,但我怀疑它并不重要。为简化起见,我需要一份保险单中所有索赔的清单,其中一项索赔满足特定条件(cat = 1)。
简化版本如下所示:
with cat_claims as (select distinct pol_nbr from claims where cat = 1)
select * from claims c
inner join policies p on p.polnbr = c.polnbr
inner join cat_claims cat on c.pol_nbr= cat.pol_nbr
Run Code Online (Sandbox Code Playgroud)
这是超级骗子慢。如果我重写它看起来像这样:
with cat_claims as (select distinct claim_nbr from claims where cat = 1)
select * into cat_claims
from cat_claims
select * from claims c
inner join policies p on p.polnbr = c.polnbr
inner join cat_claims cat …Run Code Online (Sandbox Code Playgroud) 最近我们开始使用 sp_BlitzCache 来帮助我们调整我们的查询。我们发现一个 SP 有一些问题,我们能够成功地重构它。
在我们调整查询之前的一周内,我有一份 sp_BlitzCache 的输出副本,可在此处获得
https://drive.google.com/open?id=1oiAEl62ZT51qcCEhVzkg8oDA3HB-NCsv
生成此输出的命令运行是
exec sp_BlitzCache @StoredProcName = 'hs_UpdateShipmentPackagesAndWeightSp'
Run Code Online (Sandbox Code Playgroud)
几个问题
1)我注意到我们有多个行用于同一个计划句柄,这是为什么?
2) 您会注意到成本最高的查询 (1451) 具有整个 create procedure 语句的查询文本,这是什么意思?该行的指标是否仅用于创建存储过程?
3) 对于成本最高的行,即上面提到的行,它的最小/最大授权几乎为 2GB。这是否意味着当我们运行 create procedure 语句时,它要求 2gb 的内存?还是在调用 proc 时使用此计划?我想这与问题 2 的答案有关
4) 为什么在某些情况下我们有 Min/Max grant KB > 0 和 Min/Max used grant kb > 0,但百分比内存授权为 null ?
我们正在运行 SQL Server 2012。
谢谢,凯文
当我跑
SELECT
count(object_id) AS count,
object_id,
min(name) as name1,
max(name) AS name2
FROM
sys.indexes
GROUP BY object_id HAVING COUNT(*) > 1 ORDER BY count
Run Code Online (Sandbox Code Playgroud)
我将获得具有相同object_id但不一定具有相同名称的索引列表。
不应该所有object_id具有相同名称的索引都具有相同的名称吗?
DECLARE @Error int;
INSERT INTO Person.BusinessEntityContact
(BusinessEntityID
,PersonID
,ContactTypeID)
VALUES
(0,0,1);
SELECT @Error = @@ERROR;
PRINT ‘The Value of @Error is ‘ + CONVERT(varchar, @Error);
Run Code Online (Sandbox Code Playgroud)
我有 :
消息 547,级别 16,状态 0,第 4 行 INSERT 语句与 FOREIGN KEY 约束“FK_BusinessEntityContact_Person_PersonID”相冲突......该语句已终止。@Error 的值为 547
这意味着在抛出错误后该过程仍在继续。
但是,如果我尝试创建一个表(运行以下脚本两次以触发错误)为:
CREATE TABLE OurIFTest(
Col1 int PRIMARY KEY
);
IF @@ERROR != 0
PRINT 'Problems!';
ELSE
PRINT 'Everything went OK!';
Run Code Online (Sandbox Code Playgroud)
然后我得到了
消息 2714,级别 16,状态 6,第 2 行 数据库中已经有一个名为“OurIFTest”的对象。
这意味着该进程在抛出错误时终止。
那么为什么该过程因“创建”而终止,而不因“插入”而终止?
我想移动数据库的 MDF/LDF 文件位置。从我读到的内容来看,我发现我应该使用分离/附加,而不仅仅是将数据库脱机并重新定位文件。我就是这样做的,并使用以下内容重新连接数据库。
CREATE DATABASE MyAdventureWorks
ON (FILENAME = 'C:\MySQLServer\AdventureWorks2012_Data.mdf'),
(FILENAME = 'C:\MySQLServer\AdventureWorks2012_Log.ldf')
FOR ATTACH;
GO
Run Code Online (Sandbox Code Playgroud)
当然使用我的新文件位置,它使用了两个单独的卷,而不是从中移动的位置。
BUUUT,所有这些都是将文件放回我没有指定的原始卷上。它还将数据库置于只读状态。
任何帮助,将不胜感激。
谢谢
SQL Server 2016
我们经常使用查询存储强制计划功能。
我们想审核何时以及谁强制执行每个计划。
是否需要扩展事件会话来审核此事件,
或者有包含此特定信息的 dmvs 或目录视图?
有人可以让我知道我们如何识别 SQL 服务器中是否安装了复制组件。
试过如下:
1.我们之前更改了服务器名称,因此在检查配置分发服务器和发布时给出以下警告。
SQL Server 无法连接到服务器“xxxxxxxx”。
附加信息:
SQL Server 复制需要实际的服务器名称才能连接到服务器。指定实际的服务器名称“zzzzzzzzz”。(复制。实用程序)
我将重命名服务器。
Microsoft SQL Server Management Studio 无法访问复制组件,因为此 SQL Server 实例上未安装复制。有关安装复制的信息,请参阅 SQL Server 联机丛书中的安装复制主题。
附加信息:
此服务器上未安装复制组件。再次运行 SQL Server 安装程序并选择安装复制的选项。(Microsoft SQL Server,错误:21028)
现在,请建议 SQL 实例中是否安装了 Replication 组件
我正在尝试从 SQL SERVER 2008 R2 数据库中提取 blob 数据。数据是应用程序存储的注释数据。我做了一些研究,并且在转换数据方面取得了部分成功。我得到每个条目的大约 20-30 个第一个字符。这是我使用的 SQL 语句:
select CONVERT(varchar(MAX), CONVERT(varbinary, blob)) from annotation_data;
Run Code Online (Sandbox Code Playgroud)
我怎样才能得到所有的数据?
我想为 M 个用户自动保留 N 个对象的库存。
我有两张库存跟踪表,一张用于全球库存,一张用于个人库存。
有两个表,因为我必须为每个对象以及每个用户强制执行最大允许保留。例如,一个对象可能被限制为总共保留 1000 个,每个用户最多保留 10 个该对象。
全局清单表以 [ObjectID] 为唯一键,个人清单表以 [UserID, ObjectID] 为唯一键。
为 3 个对象保留库存的示例请求如下所示。一些对象有限制,而另一些则没有。
[
{ObjectID: 'A', QuantityToReserve: 1},
{ObjectID: 'C', QuantityToReserve: 2, GlobalMax: 1000, PersonalMax: 10},
{ObjectID: 'B', QuantityToReserve: 5}
]
Run Code Online (Sandbox Code Playgroud)
原子预留是通过启动一个事务,然后首先更新全局清单表中的行来实现的,对于所有对象 ID,按升序排列。
没有限制的对象的更新语句如下所示:
UPDATE [GlobalInventory] WITH (ROWLOCK, XLOCK, HOLDLOCK)
SET [Count] = [Count] + @QuantityToReserve
WHERE [ObjectID] = @ObjectID
Run Code Online (Sandbox Code Playgroud)
具有限制的对象的更新语句如下所示:
UPDATE [GlobalInventory] WITH (ROWLOCK, XLOCK, HOLDLOCK)
SET …Run Code Online (Sandbox Code Playgroud) sql-server ×10
concurrency ×1
deadlock ×1
index ×1
locking ×1
query-store ×1
replication ×1
t-sql ×1