小编Eri*_*ing的帖子

我如何破坏数据库页面并再次恢复它

我想破坏一个数据库页面,并恢复相同的页面。

我怎么做?

sql-server corruption sql-server-2012

4
推荐指数
1
解决办法
769
查看次数

恢复暂停的任务

我正在将索引应用于具有存档数据的数据库。我知道这需要很长时间。当我昨晚离开它时,它正在运行 14 小时。今天早上我回到它,企业经理告诉我它已经失去了连接。

在检查服务器上的活动监视器时,我可以看到任务。它的状态是 SUSPENDED,等待类型为 IO_COMPLETION。

有没有办法恢复这个或杀死它并重新开始?

我跑了,sp_who2但它没有被任何其他活动阻止并且状态为 ROLLBACK。如果我然后运行kill 61 with statusonly,SQL 会告诉我;

无法获取状态报告。进程 ID 61 的回滚操作不在进行中。

只是寻找关于我下一步可以做什么/尝试的选项。谢谢。

sql-server rollback

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

使用计数更新查询

我正在尝试运行以下更新查询

UPDATE x
SET totalval = COUNT(projs)
FROM Prs x
LEFT JOIN es y
ON x.CS = y.CS
Run Code Online (Sandbox Code Playgroud)

但是,我收到错误:

消息 157,级别 15,状态 1,第 2 行
聚合可能不会出现在 UPDATE 语句的集合列表中。

应如何更改此语句才能使其成为有效的更新语句?

sql-server t-sql sql-server-2008-r2

3
推荐指数
1
解决办法
6091
查看次数

SQL Server 2017:批处理模式内存授予反馈如何工作?

批处理模式内存授予反馈是2017 查询处理器中一系列功能的一部分,其中包括:

那么批处理模式内存授予反馈是如何工作的呢?

sql-server sql-server-2017 memory-grant-feedback

3
推荐指数
1
解决办法
763
查看次数

数据库升级后,SQL 2008 SSIS 包文件是否可以与 SQL 2016 数据库一起使用?

我们计划将SQL 2008R2升级到SQL 2016。我们要先升级数据库服务器。我们为 SSIS 和 SSRS 提供了单独的 SQL 2008R2 服务器。SSIS 包存储为文件。

我的问题是:

将所有数据库服务器升级到 SQL 2016 后,所有 SQL 2008R2 SSIS 和 SSRS 服务器都可以使用 SQL 2016 数据库吗?

欣赏你的经历。

sql-server ssis upgrade

3
推荐指数
1
解决办法
200
查看次数

如何使用重新编译查找存储过程?

在我的数据库中,我有一些重新编译的存储过程

我找到它们的方式是:

SELECT OBJECT_NAME(ID)AS SP_NAME,* 
FROM SYSCOMMENTS
WHERE TEXT LIKE '%WITH RECOMPILE%'
Run Code Online (Sandbox Code Playgroud)

当我看:

select * from sys.procedures
Run Code Online (Sandbox Code Playgroud)

我发现没有重新编译的迹象。

有没有更好或更优雅的方法来找到重新编译存储过程?

sql-server stored-procedures metadata dmv sql-server-2016

3
推荐指数
1
解决办法
579
查看次数

即使表之间没有关系也会遇到死锁

我一直在研究死锁,它是不同的原因。我找到了一个关于这个问题的例子,但我无法完全理解死锁的原因,因为涉及两个不同的表,到目前为止我读到的是只涉及一个表!

首先,我在连接 1 中运行此查询:

Begin Tran

 Update  Purchasing.PurchaseOrderHeader
 Set Freight = Freight * 0.9
 Where PurchaseOrderID = 1255;
Run Code Online (Sandbox Code Playgroud)

我再次在连接 2 中运行此查询:

update Purchasing.PurchaseOrderDetail
Set OrderQty = 4
Where ProductID = 448 and
      PurchaseOrderID = 1255
Run Code Online (Sandbox Code Playgroud)

回到连接 1 我运行这个查询(这会导致死锁):

Begin Transaction

             Update Purchasing.PurchaseOrderDetail
             Set OrderQty = 2
             where ProductID = 448 and
                   PurchaseOrderID = 1255
Run Code Online (Sandbox Code Playgroud)

可以看到,事务中涉及到两张表,那么到底是什么导致了死锁呢??提前致谢

sql-server deadlock locking

3
推荐指数
1
解决办法
990
查看次数

开始事务不锁定表

我有一个具有这种结构的表:

CREATE TABLE [dbo].[a](
    [id] [INT] IDENTITY(1,1) NOT NULL,
    [aa] [INT] NULL,
 CONSTRAINT [PK_a] PRIMARY KEY CLUSTERED 
(
    [id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
Run Code Online (Sandbox Code Playgroud)

然后创建新事务,然后更新所有记录,但不要提交。所以我有这样的事情:

BEGIN TRANSACTION

UPDATE dbo.a
SET aa=4
Run Code Online (Sandbox Code Playgroud)

在新会话中,我执行选择并获得结果!并在更新前查看旧值。

SELECT * FROM a 
Run Code Online (Sandbox Code Playgroud)

当我想执行更新时,它会等待另一个事务提交。

我的问题是:

当我们在事务中更新一个表时,我们会在它上面创建一个锁,直到提交事务并且没有人可以从中选择,但为什么我可以呢?

我有 57 条记录,当我用这个检查 sql 上的锁定状态时:

SELECT resource_type, request_mode, resource_description
FROM sys.dm_tran_locks
WHERE resource_type <> 'DATABASE'
Run Code Online (Sandbox Code Playgroud)

我得到这样的结果:

resource_type         request_mode          resource_description
------------------- ------------------- ------------------- 
OBJECT                IX …
Run Code Online (Sandbox Code Playgroud)

sql-server sql-server-2016

3
推荐指数
1
解决办法
996
查看次数

将 sys.dm_exec_sql_text 中的相似查询组合在一起

我正在分析支持 3rd 方应用程序的 2008 实例。

该应用程序将生成 SQL 代码,然后将其作为临时查询发送到数据库。

我正在使用此查询(基于 Glenn Berry 脚本):

SELECT
    qs.creation_time
    ,qs.last_execution_time
    ,qs.execution_count
    ,qs.total_worker_time
    ,qs.total_physical_reads
    ,qs.total_logical_writes
    ,qs.total_logical_reads
    ,qs.plan_handle
    ,qt.text
    ,qt.dbid
FROM 
        sys.dm_exec_query_stats AS qs WITH (NOLOCK)
        CROSS APPLY sys.dm_exec_sql_text(qs.sql_handle) AS qt
WHERE
    qt.dbid >= 7
OPTION (RECOMPILE)
Run Code Online (Sandbox Code Playgroud)

我的问题是我正在为非常相似的查询获得数千个计划,即

SELECT * FROM customers WHERE name = 'bob'
SELECT * FROM customers WHERE name = 'bill'
Run Code Online (Sandbox Code Playgroud)

(实际上查询非常大,最多 3000 个字符)

这使得将数据转换为适合高级分析的格式几乎是不可能的。

是否可以快速比较 2 个 SQL 查询并查看它们是否几乎相同?然后我会随机选择其中一个查询,并将所有活动与该查询进行分组。(我试过 DIFFERENCE 但速度很慢)

SQL 是否已经存储了一个类似于 MD5 Hash sql_handle 的值,它允许它查看两个查询是否相似并因此重用相同的计划?(如果存在这样的值,那么我会对此进行分组)

我对存储过程没有这个问题,因为正在重用相同的计划。我只想将所有类似的临时人员组合在一起。

sql-server-2008 sql-server dmv plan-cache

3
推荐指数
1
解决办法
153
查看次数

交叉连接产生多次读取其中一个表的执行计划

我有一个查询,我需要将一个有 5 行的小表交叉连接到一个大约有 31k 行的表。SQL Server 提出的执行计划在两个表中进行索引扫描,并将它们与嵌套循环 (INNER JOIN) 连接起来。但是,在检查执行计划时,我注意到对较小表的扫描为下一步生成了 5 x 31k = 155k 行。这是否意味着 SQL Server 正在扫描较小表的索引 31k 次?

这是我遇到的问题的小复制:

CREATE TABLE A (id INT PRIMARY KEY);

CREATE TABLE B (id INT PRIMARY KEY);

INSERT INTO A(id)
    VALUES (1), (2), (3), (4), (5);

INSERT INTO B(id)
    VALUES (1), (2), (3), (4), (5), (6), (7), (8), (9)


SELECT * FROM A CROSS JOIN B
Run Code Online (Sandbox Code Playgroud)

这是SELECT命令 的查询实时统计信息这是<code>SELECT</code>命令的查询实时统计

我的问题是,小表上的索引扫描是否正在执行多个 I/O 操作,大表上的每一行一个,而不是只执行一次并且只将其结果提供给以下步骤一次。

sql-server

3
推荐指数
1
解决办法
609
查看次数