PostgreSQL DBA(77) - Locks(Lock Monitoring)

本节介绍了在pg_locks和pg_stat_activity两张基表基础上创建的视图.

显示阻塞信息的视图:


CREATE OR REPLACE VIEW vw_lockinfo
AS
SELECT blocked_locks.pid     AS blocked_pid,
         blocked_activity.usename  AS blocked_user,
         blocking_locks.pid     AS blocking_pid,
         blocking_activity.usename AS blocking_user,
         blocked_activity.query    AS blocked_statement,
         blocking_activity.query   AS current_statement_in_blocking_process
   FROM  pg_catalog.pg_locks         blocked_locks
    JOIN pg_catalog.pg_stat_activity blocked_activity  ON blocked_activity.pid = blocked_locks.pid
    JOIN pg_catalog.pg_locks         blocking_locks 
        ON blocking_locks.locktype = blocked_locks.locktype
        AND blocking_locks.DATABASE IS NOT DISTINCT FROM blocked_locks.DATABASE
        AND blocking_locks.relation IS NOT DISTINCT FROM blocked_locks.relation
        AND blocking_locks.page IS NOT DISTINCT FROM blocked_locks.page
        AND blocking_locks.tuple IS NOT DISTINCT FROM blocked_locks.tuple
        AND blocking_locks.virtualxid IS NOT DISTINCT FROM blocked_locks.virtualxid
        AND blocking_locks.transactionid IS NOT DISTINCT FROM blocked_locks.transactionid
        AND blocking_locks.classid IS NOT DISTINCT FROM blocked_locks.classid
        AND blocking_locks.objid IS NOT DISTINCT FROM blocked_locks.objid
        AND blocking_locks.objsubid IS NOT DISTINCT FROM blocked_locks.objsubid
        AND blocking_locks.pid != blocked_locks.pid
    JOIN pg_catalog.pg_stat_activity blocking_activity ON blocking_activity.pid = blocking_locks.pid
   WHERE NOT blocked_locks.GRANTED;
[local]:5432 pg12@testdb=# CREATE OR REPLACE VIEW vw_lockinfo
pg12@testdb-# AS
pg12@testdb-# SELECT blocked_locks.pid     AS blocked_pid,
pg12@testdb-#          blocked_activity.usename  AS blocked_user,
pg12@testdb-#          blocking_locks.pid     AS blocking_pid,
pg12@testdb-#          blocking_activity.usename AS blocking_user,
pg12@testdb-#          blocked_activity.query    AS blocked_statement,
pg12@testdb-#          blocking_activity.query   AS current_statement_in_blocking_process
pg12@testdb-#    FROM  pg_catalog.pg_locks         blocked_locks
pg12@testdb-#     JOIN pg_catalog.pg_stat_activity blocked_activity  ON blocked_activity.pid = blocked_locks.pid
pg12@testdb-#     JOIN pg_catalog.pg_locks         blocking_locks 
pg12@testdb-#         ON blocking_locks.locktype = blocked_locks.locktype
pg12@testdb-#         AND blocking_locks.DATABASE IS NOT DISTINCT FROM blocked_locks.DATABASE
pg12@testdb-#         AND blocking_locks.relation IS NOT DISTINCT FROM blocked_locks.relation
pg12@testdb-#         AND blocking_locks.page IS NOT DISTINCT FROM blocked_locks.page
pg12@testdb-#         AND blocking_locks.tuple IS NOT DISTINCT FROM blocked_locks.tuple
pg12@testdb-#         AND blocking_locks.virtualxid IS NOT DISTINCT FROM blocked_locks.virtualxid
pg12@testdb-#         AND blocking_locks.transactionid IS NOT DISTINCT FROM blocked_locks.transactionid
pg12@testdb-#         AND blocking_locks.classid IS NOT DISTINCT FROM blocked_locks.classid
pg12@testdb-#         AND blocking_locks.objid IS NOT DISTINCT FROM blocked_locks.objid
pg12@testdb-#         AND blocking_locks.objsubid IS NOT DISTINCT FROM blocked_locks.objsubid
pg12@testdb-#         AND blocking_locks.pid != blocked_locks.pid
pg12@testdb-#  
pg12@testdb-#     JOIN pg_catalog.pg_stat_activity blocking_activity ON blocking_activity.pid = blocking_locks.pid
pg12@testdb-#    WHERE NOT blocked_locks.GRANTED;
CREATE VIEW
Time: 131.424 ms
[local]:5432 pg12@testdb=# select * from vw_lockinfo;
-[ RECORD 1 ]-------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------
blocked_pid                           | 2184
blocked_user                          | pg12
blocking_pid                          | 2863
blocking_user                         | pg12
blocked_statement                     | update t_lock set id = 1000 where id = 1;
current_statement_in_blocking_process | select pid,locktype,relation::regclass,mode,page,tuple,virtualxid,transactionid,virtualtransaction,granted,fastpath from pg_locks where relation='t_lock'::regclass;
Time: 21.032 ms

显示带有时间属性的locks


CREATE OR REPLACE VIEW vw_lockinfo_time
AS
SELECT a.datname,
         l.relation::regclass,
         l.transactionid,
         l.mode,
         l.GRANTED,
         a.usename,
         a.query,
         a.query_start,
         age(now(), a.query_start) AS "age",
         a.pid
FROM pg_stat_activity a
JOIN pg_locks l ON l.pid = a.pid
ORDER BY a.query_start;
[local]:5432 pg12@testdb=# CREATE OR REPLACE VIEW vw_lockinfo_time
pg12@testdb-# AS
pg12@testdb-# SELECT a.datname,
pg12@testdb-#          l.relation::regclass,
pg12@testdb-#          l.transactionid,
pg12@testdb-#          l.mode,
pg12@testdb-#          l.GRANTED,
pg12@testdb-#          a.usename,
pg12@testdb-#          a.query,
pg12@testdb-#          a.query_start,
pg12@testdb-#          age(now(), a.query_start) AS "age",
pg12@testdb-#          a.pid
pg12@testdb-# FROM pg_stat_activity a
pg12@testdb-# JOIN pg_locks l ON l.pid = a.pid
pg12@testdb-# ORDER BY a.query_start;
CREATE VIEW
Time: 17.799 ms
[local]:5432 pg12@testdb=# select * from vw_lockinfo_time;
-[ RECORD 1 ]-+--------------------------------------------------------------------------------
-------------------------------------------------------------------------------------
datname       | testdb
relation      | t_lock
transactionid | 
mode          | RowExclusiveLock
granted       | t
usename       | pg12
query         | select pid,locktype,relation::regclass,mode,page,tuple,virtualxid,transactionid
,virtualtransaction,granted,fastpath from pg_locks where relation='t_lock'::regclass;
query_start   | 2019-08-13 15:32:23.139886+08
age           | 00:11:29.095421
pid           | 2863
...

参考资料
Lock Monitoring

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/6906/viewspace-2653614/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/6906/viewspace-2653614/

智能网联汽车的安全员高级考试涉及多个方面的专业知识,包括但不限于自动驾驶技术原理、车辆传感器融合、网络安全防护以及法律法规等内容。以下是针对该主题的一些核心知识解析: ### 关于智能网联车安全员高级考试的核心内容 #### 1. 自动驾驶分级标准 国际自动机工程师学会(SAE International)定义了六个级别的自动驾驶等级,从L0到L5[^1]。其中,L3及以上级别需要安全员具备更高的应急处理能力。 #### 2. 车辆感知系统的组成与功能 智能网联车通常配备多种传感器,如激光雷达、毫米波雷达、摄像头和超声波传感器等。这些设备协同工作以实现环境感知、障碍物检测等功能[^2]。 #### 3. 数据通信与网络安全 智能网联车依赖V2X(Vehicle-to-Everything)技术进行数据交换,在此过程中需防范潜在的网络攻击风险,例如中间人攻击或恶意软件入侵[^3]。 #### 4. 法律法规要求 不同国家和地区对于无人驾驶测试及运营有着严格的规定,考生应熟悉当地交通法典中有关自动化驾驶部分的具体条款[^4]。 ```python # 示例代码:模拟简单决策逻辑 def decide_action(sensor_data): if sensor_data['obstacle'] and not sensor_data['emergency']: return 'slow_down' elif sensor_data['pedestrian_crossing']: return 'stop_and_yield' else: return 'continue_driving' example_input = {'obstacle': True, 'emergency': False, 'pedestrian_crossing': False} action = decide_action(example_input) print(f"Action to take: {action}") ``` 需要注意的是,“同学”作为特定平台上的学习资源名称,并不提供官方认证的标准答案集;建议通过正规渠道获取教材并参加培训课程来准备此类资格认证考试
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值