模拟并解决死锁
使用idea连接数据库 并使用手动提交事务的方式去模拟 当然 也可以直接使用sql命令的方式实现手动提交事务
-- 事务一
BEGIN;-- 执行一些操作,例如更新表中的一行数据UPDATE table_name SET column_name = 'test' WHERE column_name = 'test';-- 尝试获取对表 1 中某行数据的排他锁SELECT * FROM table_name_2 WHERE column_name = 1 FOR UPDATE;COMMIT;-- 事务二
BEGIN;-- 执行一些操作,例如更新表中的一行数据UPDATE table_name_2 SET column_name = 1 WHERE column_name = 1;-- 尝试获取对表 2 中某行数据的排他锁SELECT * FROM table_name WHERE column_name = 'test' FOR UPDATE;COMMIT;-- 方式一
-- 查看死锁的sql以及进程Idselect pid,query,* from pg_stat_activity where datname='iuin' and wait_event_type = 'Lock';
-- 只能杀死select 语句, 对其他语句不生效select pg_cancel_backend('28736');-- select,drop等各种操作select pg_terminate_backend('25605');
-- 方式二
-- 查看对应表都有哪些锁select locktype,pid,relation,mode,granted,* from pg_locks where relation in (select oid from pg_class where relname='table_name');select pg_terminate_backend('进程ID');
-- 测试
-- 终止所有被激活的锁select pg_terminate_backend(pid)from pg_stat_activitywhere state = 'active' and pid != pg_backend_pid() and pid in (select a.pid from pg_locks a join pg_class b on a.relation = b.oid where lower(b.relname) = 'news_content');查看同一事物中都执行了哪些sql
Section titled “查看同一事物中都执行了哪些sql”- 一些第三方的扩展工具,如 pg_stat_monitor ,可以提供更详细和有针对性的事务执行信息。
pgsql当前线程数与最大线程数
Section titled “pgsql当前线程数与最大线程数”PostgreSQL 最大连接数:通过 postgresql.conf 文件或 SQL 查询 SHOW max_connections; 获取。
当前连接数:通过 SQL 查询 SELECT count(*), sum(case when state = 'active' then 1 else 0 end) FROM pg_stat_activity; 获取。