Oracle vs PostgreSQL,研發注意事項(1)-查詢鎖表
Oracle資料庫,查詢語句不會鎖表,但PostgreSQL在開啟事務後,查詢資料表會鎖表,在試圖DROP/TRUNCATE TABLE時會一直等待。
--------------------------- Session A
drop table if exists t1;
-- 開啟事務
begin;
-- 查詢當前事務號
select txid_current();
-- 建立表&插入100w資料
create table t1(id int,c1 varchar(20));
-- 查詢當前事務號
select txid_current();
insert into t1 select generate_series(1,1000000),'#TESTDATA#';
-- 提交事務
end;
--------------------------- Session B
-- 開啟事務
begin;
-- 查詢當前事務號
select txid_current();
-- 查詢資料表
select count(*) from t1;
--------------------------- Session A
-- 重新回到Session A,刪除資料表
drop table t1; -- 這時會一直等待
查詢資料庫鎖資訊:
testdb=# SELECT pid, relname , locktype, mode
testdb-# FROM pg_locks l JOIN pg_class t ON l.relation = t.oid
testdb-# AND t.relkind = 'r'
testdb-# WHERE t.relname = 't1';
pid | relname | locktype | mode
------+---------+----------+---------------------
1574 | t1 | relation | AccessShareLock
1585 | t1 | relation | AccessExclusiveLock
(2 rows)
發現查詢t1(1574為Session B的pid)時會持有AccessShareLock,導致drop table一直等待該鎖釋放後才能執行。
參考:
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/6906/viewspace-2158210/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Oracle vs PostgreSQL,研發注意事項(6)- 事務處理OracleSQL
- Oracle vs PostgreSQL,研發注意事項(12) - NULL與索引OracleSQLNull索引
- Oracle vs PostgreSQL,研發注意事項(13) - UPDATE語句OracleSQL
- Oracle vs PostgreSQL,研發注意事項(5)- 字元型別OracleSQL字元型別
- Oracle vs PostgreSQL,研發注意事項(7)- 型別轉換OracleSQL型別
- Oracle vs PostgreSQL,研發注意事項(2)-DDL語句與事務OracleSQL
- Oracle vs PostgreSQL,研發注意事項(9)- PostgreSQL資料型別轉換規則#1OracleSQL資料型別
- Oracle vs PostgreSQL,研發注意事項(8)- Oracle資料比較規則OracleSQL
- Oracle vs PostgreSQL,研發注意事項(3)- 事務回滾之UPDATE操作解析OracleSQL
- Oracle vs PostgreSQL,研發注意事項(10)- PostgreSQL資料型別轉換規則#2OracleSQL資料型別
- Oracle vs PostgreSQL,研發注意事項(11)- PostgreSQL資料型別轉換規則#3OracleSQL資料型別
- Oracle vs PostgreSQL,研發注意事項(4)- PageSize對資料儲存的影響OracleSQL
- oracle 例項表查詢Oracle
- Oracle臨時表使用注意事項Oracle
- hive查詢注意事項和調優Hive
- vs.net 2003水晶報表部署注意事項
- oracle 查詢鎖 && 解鎖Oracle
- Oracle查詢鎖、解鎖Oracle
- Oracle使用*的注意事項Oracle
- Mysql設計與查詢的關鍵注意事項MySql
- [爬坑日誌1]寫查詢的mysql一些小注意事項MySql
- Oracle資料庫表設計時的注意事項Oracle資料庫
- mysql鎖表查詢MySql
- Oracle 資料匯出注意事項Oracle
- form表單提交注意事項ORM
- IMPDP分割槽表注意事項
- Oracle:記憶體設定注意事項Oracle記憶體
- [Android開發] 注意事項Android
- FPGA注意事項——鎖存器的產生FPGA
- sql 開發篇一 之 表鎖查詢及解鎖SQL
- oracle表複雜查詢Oracle
- 【ASM】Oracle asm刪除磁碟組注意事項ASMOracle
- SQL Server 表分割槽注意事項HXSQLServer
- Oracle vs PostgreSQL DBA(21)- Oracle VPDOracleSQL
- 介面開發文件及注意事項
- uni-app開發注意事項APP
- spring cloud開發、部署注意事項SpringCloud
- @Lombok注意事項Lombok