当前位置: 首页 > news >正文

名城建设有限公司网站工程承包网站哪个好?

名城建设有限公司网站,工程承包网站哪个好?,绍兴柯桥哪里有做网站的,git wordpressPostgreSQL 的 pg_advisory_lock_shared 函数详解 pg_advisory_lock_shared 是 PostgreSQL 提供的共享咨询锁函数#xff0c;允许多个会话同时获取相同键值的共享锁#xff0c;但排斥排他锁。 共享咨询锁 vs 排他咨询锁 锁类型共享锁 (pg_advisory_lock_shared)排他锁 (pg…PostgreSQL 的 pg_advisory_lock_shared 函数详解 pg_advisory_lock_shared 是 PostgreSQL 提供的共享咨询锁函数允许多个会话同时获取相同键值的共享锁但排斥排他锁。 共享咨询锁 vs 排他咨询锁 锁类型共享锁 (pg_advisory_lock_shared)排他锁 (pg_advisory_lock)并发性允许多个会话同时持有同一时间只能由一个会话持有排斥性排斥排他锁排斥共享锁和排他锁使用场景读多写少场景独占访问场景 共享咨询锁函数家族 PostgreSQL 提供以下共享咨询锁相关函数 函数描述锁类型pg_advisory_lock_shared(key)获取共享会话级咨询锁阻塞共享锁pg_try_advisory_lock_shared(key)尝试获取共享会话级咨询锁非阻塞共享锁pg_advisory_xact_lock_shared(key)获取共享事务级咨询锁阻塞共享锁pg_try_advisory_xact_lock_shared(key)尝试获取共享事务级咨询锁非阻塞共享锁pg_advisory_unlock_shared(key)释放共享会话级咨询锁- 函数详解 1 pg_advisory _lock_shared(key bigint) 功能获取会话级共享咨询锁阻塞 参数 key 64位整数锁标识 示例 -- 会话1获取共享锁 SELECT pg_advisory_lock_shared(123456);-- 会话2可以同时获取相同的共享锁 SELECT pg_advisory_lock_shared(123456);-- 但会话3尝试获取排他锁会被阻塞 SELECT pg_advisory_lock(123456); -- 阻塞直到共享锁释放2 pg_try_advisory_lock_shared(key bigint) 功能尝试获取共享会话级咨询锁非阻塞 返回值booleantrue表示获取成功 示例 DO $$ BEGINIF pg_try_advisory_lock_shared(123456) THENRAISE NOTICE Shared lock acquired, performing read operations...;-- 执行只读操作PERFORM pg_advisory_unlock_shared(123456);ELSERAISE NOTICE Could not acquire shared lock;END IF; END $$;3 pg_advisory_xact_lock_shared(key bigint) 功能获取事务级共享咨询锁事务结束时自动释放 示例 BEGIN; SELECT pg_advisory_xact_lock_shared(123456); -- 执行只读操作 COMMIT; -- 锁自动释放锁兼容性矩阵 当前持有锁 \ 请求锁共享锁排他锁无锁允许允许共享锁允许阻塞排他锁阻塞阻塞 实际应用场景 场景1读写分离控制 -- 读操作使用共享锁 DO $$ BEGINPERFORM pg_advisory_lock_shared(555);-- 多个会话可以同时执行读操作RAISE NOTICE Reading data: %, (SELECT count(*) FROM large_table);PERFORM pg_advisory_unlock_shared(555); EXCEPTION WHEN OTHERS THENPERFORM pg_advisory_unlock_shared(555);RAISE; END $$;-- 写操作使用排他锁 DO $$ BEGINPERFORM pg_advisory_lock(555); -- 会阻塞直到所有共享锁释放-- 独占执行写操作INSERT INTO large_table VALUES (...);PERFORM pg_advisory_unlock(555); EXCEPTION WHEN OTHERS THENPERFORM pg_advisory_unlock(555);RAISE; END $$;场景2缓存更新控制 -- 缓存读取多个客户端可同时读取 CREATE OR REPLACE FUNCTION get_cached_data(cache_key text) RETURNS json AS $$ DECLAREresult json; BEGIN-- 获取共享锁允许并发读取PERFORM pg_advisory_lock_shared(hashtext(cache_key));SELECT data INTO result FROM cache_table WHERE key cache_key;PERFORM pg_advisory_unlock_shared(hashtext(cache_key));RETURN result; END; $$ LANGUAGE plpgsql;-- 缓存更新独占访问 CREATE OR REPLACE FUNCTION update_cache(cache_key text, new_data json) RETURNS void AS $$ BEGIN-- 获取排他锁阻塞直到所有共享锁释放PERFORM pg_advisory_lock(hashtext(cache_key));-- 执行更新INSERT INTO cache_table(key, data, updated_at)VALUES (cache_key, new_data, NOW())ON CONFLICT (key) DO UPDATESET data EXCLUDED.data, updated_at NOW();PERFORM pg_advisory_unlock(hashtext(cache_key)); END; $$ LANGUAGE plpgsql;场景3配置热加载 -- 配置读取多个服务实例可同时读取 CREATE OR REPLACE FUNCTION get_config() RETURNS SETOF config_entry AS $$ BEGIN-- 获取共享锁确保配置加载过程中不被修改PERFORM pg_advisory_lock_shared(1); -- 使用固定键值1表示配置锁RETURN QUERY SELECT * FROM application_config;PERFORM pg_advisory_unlock_shared(1); END; $$ LANGUAGE plpgsql;-- 配置更新管理员调用 CREATE OR REPLACE FUNCTION reload_config(new_config json) RETURNS void AS $$ BEGIN-- 获取排他锁确保没有服务正在读取配置PERFORM pg_advisory_lock(1);-- 清空并重新加载配置TRUNCATE application_config;INSERT INTO application_configSELECT * FROM json_populate_recordset(NULL::config_entry, new_config);PERFORM pg_advisory_unlock(1); END; $$ LANGUAGE plpgsql;监控共享咨询锁 查看当前共享锁 SELECT pid, locktype, mode, granted FROM pg_locks WHERE locktype advisory AND mode LIKE %Share%;查看锁等待情况 SELECT blocked.pid AS blocked_pid,blocking.pid AS blocking_pid,blocked.query AS blocked_query,blocking.query AS blocking_query,blocked.mode AS blocked_mode,blocking.mode AS blocking_mode FROM pg_catalog.pg_locks blocked JOIN pg_catalog.pg_stat_activity blocking ON blocking.pid blocked.blocking_pid WHERE blocked.locktype advisory AND NOT blocked.granted;注意事项 锁释放 必须确保每个 pg_advisory_lock_shared() 调用都有对应的 pg_advisory_unlock_shared()事务级共享锁会在事务结束时自动释放 死锁风险 共享锁之间不会死锁但共享锁与排他锁混合使用时可能产生死锁建议使用固定的锁获取顺序 性能考虑 共享锁比排他锁允许更高的并发性但大量共享锁仍可能影响性能 锁粒度 使用不同键值控制不同资源的访问避免使用太少键值导致过度争用 会话管理 确保异常情况下锁能被释放使用EXCEPTION块长时间持有锁可能导致其他会话长时间等待 pg_advisory_lock_shared 是实现读多写少场景并发控制的强大工具合理使用可以显著提高系统吞吐量特别是在需要协调多个读取者与少量写入者的场景中。
http://www.pierceye.com/news/103735/

相关文章:

  • 企业网站建设套餐费用网站开发完后期维护重要吗
  • 3营销型网站建设湖北短视频seo推荐
  • 鸿运通网站建设未成年怎么在网上卖东西
  • 郑州网站推广排名公司商会小程序开发一个多少钱啊
  • wordpress单页网站在本页跳转心理网站的建设与维护
  • 哪里可以做网站系统企业管理官网登录入口
  • iis7 网站404错误信息官网下载软件
  • 广州建设网站平台广东seo网站推广代运营
  • 网站 优化 关键字qq官网登录
  • 建设银行园区公积金管理中心网站地方门户网站推广
  • 桂林市网站设计wordpress远程数据库
  • 网站建设多钱怎么做网上卖菜网站
  • 响应式电商网站网站设计常见问题
  • 爱常德网凡科网站可以做seo优化
  • 建设银行手机银行官方网站小程序app公众号的区别
  • 彩票网站维护需要几天企业展示网站建设需要做什么
  • cms网站后台模版惠州网站设计哪家好
  • 海南智能网站建设设计湘潭学校网站建设 x磐石网络
  • 网站建设的入门书籍表格我做视频网站
  • 数据库跟网站内容青岛公司做网站的价格
  • 成都市金牛区建设和交通局网站营销专业网站
  • 免费的视频网站如何赚钱wordpress推广系统
  • 上海酒店团购网站建设网站建设风险分析
  • 做网站的抬头怎么做南昌app定制
  • 深圳市企业网站建设企业品牌设计
  • 做图网站有哪些内容惠州抖音推广
  • 郑州中原区建设局网站公司网站建设素材
  • 企业手机网站源码下载企查查网页版
  • 金科网站建设ps做网站难吗
  • 如何在年报网站上做遗失公告wordpress默认摘要