我想破坏一个数据库页面,并恢复相同的页面。
我怎么做?
我正在将索引应用于具有存档数据的数据库。我知道这需要很长时间。当我昨晚离开它时,它正在运行 14 小时。今天早上我回到它,企业经理告诉我它已经失去了连接。
在检查服务器上的活动监视器时,我可以看到任务。它的状态是 SUSPENDED,等待类型为 IO_COMPLETION。
有没有办法恢复这个或杀死它并重新开始?
我跑了,sp_who2但它没有被任何其他活动阻止并且状态为 ROLLBACK。如果我然后运行kill 61 with statusonly,SQL 会告诉我;
无法获取状态报告。进程 ID 61 的回滚操作不在进行中。
只是寻找关于我下一步可以做什么/尝试的选项。谢谢。
我正在尝试运行以下更新查询
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 2008R2升级到SQL 2016。我们要先升级数据库服务器。我们为 SSIS 和 SSRS 提供了单独的 SQL 2008R2 服务器。SSIS 包存储为文件。
我的问题是:
将所有数据库服务器升级到 SQL 2016 后,所有 SQL 2008R2 SSIS 和 SSRS 服务器都可以使用 SQL 2016 数据库吗?
欣赏你的经历。
在我的数据库中,我有一些重新编译的存储过程
我找到它们的方式是:
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)
我发现没有重新编译的迹象。
有没有更好或更优雅的方法来找到重新编译存储过程?
我一直在研究死锁,它是不同的原因。我找到了一个关于这个问题的例子,但我无法完全理解死锁的原因,因为涉及两个不同的表,到目前为止我读到的是只涉及一个表!
首先,我在连接 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)
可以看到,事务中涉及到两张表,那么到底是什么导致了死锁呢??提前致谢
我有一个具有这种结构的表:
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) 我正在分析支持 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 的值,它允许它查看两个查询是否相似并因此重用相同的计划?(如果存在这样的值,那么我会对此进行分组)
我对存储过程没有这个问题,因为正在重用相同的计划。我只想将所有类似的临时人员组合在一起。
我有一个查询,我需要将一个有 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)
我的问题是,小表上的索引扫描是否正在执行多个 I/O 操作,大表上的每一行一个,而不是只执行一次并且只将其结果提供给以下步骤一次。
sql-server ×10
dmv ×2
corruption ×1
deadlock ×1
locking ×1
metadata ×1
plan-cache ×1
rollback ×1
ssis ×1
t-sql ×1
upgrade ×1