我们有一个事务已经运行了 5 个多小时。我们的磁盘空间不足。会话已被终止,但仍在等待 IO_COMPLETION。实际上wait_type 只是更改为PAGEIOLATCH_EX。如何终止挂起的 SQL Server 事务?我不担心丢失数据,因为所有数据都可以重新填充。
session_id: 54
STATUS: suspended
blocked by: 0
wait_type: PAGEIOLATCH_EX
Elapsed Time (in Sec): 19750.420000
open_transaction_count: 2
Run Code Online (Sandbox Code Playgroud) 四天前,一个用户在一个有 400,000,000 行的表上运行了下面的命令。它仍在运行,日志文件的大小也在增加。
delete from [table-name]
Run Code Online (Sandbox Code Playgroud)
该表确实有一个未启用检查的外键约束,我知道另一个表中不存在任何行。
数据库正在启用“Is Read Committed Snapshot On”并处于简单恢复模式下运行。
在这运行了几个小时之后,我发出了一个终止会话命令,因为我们的日志文件磁盘空间不足。我添加了另一个日志文件以允许系统继续运行。
日志文件继续增长,当我使用 statusonly 运行 kill session 时,它返回此消息:
SPID 123: transaction rollback in progress. Estimated rollback completion: 0%. Estimated time remaining: 0 seconds.
Run Code Online (Sandbox Code Playgroud)
我不知道如何处理这个查询以使其回滚并且也只是了解正在发生的事情,任何人都可以建议我可以查看什么?
是否有任何选项可以在查询存储中查看已终止的会话?
我这么问是因为我们有一个附加工具,如果会话运行时间超过 30 分钟(KILL命令),它就会终止会话。
我想检查查询存储中已终止查询的执行计划。我在查询存储中找不到被这个附加应用程序杀死的会话/查询。
问题:某个应用程序的用户执行一个涉及大量 sql 查询的报告。几分钟后,用户退出应用程序(或者更糟糕的是,应用程序崩溃,或者与数据库服务器的连接丢失)。然而,查询会继续执行,即使不再需要它。
所以我已经阅读了这些类型的情况以及如何处理它们,并且建议使用TCP Keepalive 配置。
问题是看起来 postgres 忽略了这个配置。我在“postgres 级别”和“操作系统级别”都降低了原始配置值,但没有运气:
我什至尝试重新加载/重新启动 postgres 但没有任何效果,查询一直运行到最后两分钟。¿是否有任何额外的步骤我遗漏了?
编辑:pg_stat_activity 的结果:
datid | datname | procpid | usesysid | usename | current_query | waiting | xact_start | query_start | backend_start | client_addr | client_port
----------+--------------------------------------------+---------+----------+----------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+---------+-------------------------------+-------------------------------+-------------------------------+-------------+-------------
467061608 | libertya_prod_hts_rg1_20161004_qafuncional | 16716 | 16384 | libertya | SELECT dt.signo_issotrx, …Run Code Online (Sandbox Code Playgroud) 如何使用无限循环的 plperl 函数终止会话?
双方pg_terminate_backend并pg_cancel_backend没有任何影响。kill -1 pid什么也没做,kill -9 pid服务器崩溃了。
我有一个无法杀死的顽固 spid,它阻止了我的 tempdb的事务日志被截断
这就是我发现这个流氓 spid 的方法:
if object_id('tempdb..#OpenTranStatus','U') is not null
drop table #OpenTranStatus
CREATE TABLE #OpenTranStatus (
ActiveTransaction varchar(25),
Details sql_variant
);
-- Execute the command, putting the results in the table.
INSERT INTO #OpenTranStatus
EXEC ('DBCC OPENTRAN (sqlwatch) with tableresults')
SELECT * FROM #OpenTranStatus
Run Code Online (Sandbox Code Playgroud)
这是它正在运行(或保留)的查询:
select d.database_id , sd.sqlwatch_database_id, sd.sql_instance
into #d
from dbo.vw_sqlwatch_sys_databases d
inner join [dbo].[sqlwatch_meta_database] sd
on sd.[database_name] = d.[name] collate database_default
and sd.[database_create_date] = case when d.name = 'tempdb' …Run Code Online (Sandbox Code Playgroud) 如何使用 Linux 命令行命令终止 mysql 中用户的所有会话?
我有一个用户正在使用我的数据库连接上的所有内容,并且要一一杀死我想制作一个脚本来杀死它们全部!
For a SQL Server on a VM/physical box (not Azure SQL database!)
Run Code Online (Sandbox Code Playgroud)
这是否可以授予 KILL 权限,但以某种方式授予者只能终止某些数据库的连接?
我不想授予此用户杀死任何连接的能力,而只是 1 个数据库
谢谢!!
我正在尝试在大型数据库上运行查询而不终止与服务器的连接。
我在具有 16GB 内存和大约 40GB 可用磁盘空间的 Mac 上使用 Postgres 12.1。根据数据,数据库为 78GB pg_database_size,最大表为 20GB pg_total_relation_size。
无论我运行哪个非工作查询,我(从日志中)得到的错误是:
server process (PID xxx) was terminated by signal 9: Killed: 9
Run Code Online (Sandbox Code Playgroud)
在 VS 代码中,错误是"lost connection to server".
两个不起作用的例子是:
UPDATE table
SET column = NULL
WHERE column = 0;
Run Code Online (Sandbox Code Playgroud)
select columnA
from table1
where columnA NOT IN (
select columnB
from table2
);
Run Code Online (Sandbox Code Playgroud)
我可以通过添加 1,000,000 个来运行某些查询(例如上面的查询)LIMIT。
我怀疑由于临时文件而导致磁盘不足,但在日志(带有log_temp_files = 0)中,我看不到任何正在写入的临时文件。
我尝试增加和减少work_mem, maintenance_work_mem,shared_buffers和temp_buffers。没有一个起作用,性能大致相同。 …
kill ×9
sql-server ×4
postgresql ×3
transaction ×2
connections ×1
dbcc ×1
delete ×1
hang ×1
jit ×1
linux ×1
mac-os-x ×1
mysql ×1
perl ×1
permissions ×1
query-store ×1
rollback ×1
tcpip ×1
tempdb ×1