<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??碼云GVP開源項目 12k star Uniapp+ElementUI 功能強大 支持多語言、二開方便! 廣告
                # 47.59\. `pg_locks` `pg_locks`提供有關在數據庫服務器中由打開的事務持有的鎖的信息。 參閱[Chapter 13](#calibre_link-444)獲取有關鎖的更多的討論。 `pg_locks`對每個活躍的可鎖定對象、請求的鎖模式、 以及相關的事務保存一行。因此,如果多個事務持有或者等待對同一個對象的鎖, 那么同一個可鎖定的對象可能出現多次。不過,一個目前沒有鎖在其上的對象將肯定不會出現。 有好幾種不同的可鎖定對象:一個關系(也就是一個表)、關系中獨立頁面、 關系中獨立的行、一個事務 ID(虛擬和永久ID)、以及一般的數據庫對象 (用類別 OID 和對象 OID 標識,表示方法和`pg_description` 或`pg_depend`一樣)還有,擴展一個關系的權限也是用一種獨立的可鎖定對象表示的。 另外,"advisory"鎖可以用在有用戶定義的含義的數據上。 **Table 47-60\. `pg_locks` 字段** | 名字 | 類型 | 引用 | 描述 | | --- | --- | --- | --- | | `locktype` | `text` | 可鎖定對象的類型: `relation`, `extend`, `page`, `tuple`, `transactionid`, `virtualxid`, `object`, `userlock`, 或 `advisory` | | `database` | `oid` | `pg_database`.oid | 目標所在的數據庫的 OID ,如果目標是共享對象,那么就是零, 如果目標是一個事務 ID ,就是 null 。 | | `relation` | `oid` | `pg_class`.oid | 關系的 OID ,如果目標不是關系,也不是關系的一部分,則為 null | | `page` | `integer` | 關系內部的頁面編號,如果目標不是行頁不是關系頁,則為null | | `tuple` | `smallint` | 頁面里面的行編號,如果目標不是行,則為 null | | `virtualxid` | `text` | 事務的虛擬 ID ,如果目標不是虛擬事務 ID ,就是 null | | `transactionid` | `xid` | 事務的 ID ,如果目標不是事務 ID ,就是 null | | `classid` | `oid` | `pg_class`.oid | 包含該目標的系統表的 OID ,如果目標不是普通數據庫對象,則為 null | | `objid` | `oid` | 任意OID屬性 | 目標在其系統表內的 OID ,如果目標不是普通數據庫對象,則為 null | | `objsubid` | `smallint` | 字段編號(`classid`和`objid`指向表自身)。 如果目標是其它普通數據庫對象,這個字段是零。如果這個目標不是普通數據庫對象,則為 null | | `virtualtransaction` | `text` | 持有此鎖或者在等待此鎖的事務的虛擬 ID | | `pid` | `integer` | 持有或者等待這個鎖的服務器進程的進程 ID 。如果鎖是被一個預備事務持有的,那么為 null | | `mode` | `text` | 這個進程持有的或者是期望的鎖模式(參閱[Section 13.3.1](#calibre_link-726) 和 [Section 13.2.3](#calibre_link-727)) | | `granted` | `boolean` | 如果持有鎖,為真,如果等待鎖,為假 | | `fastpath` | `boolean` | 如果鎖通過快速路徑獲得為真,如果通過主鎖表獲得為假 | `granted`為真時表明指定事務持有一個鎖。為假則表明該事務當前等待使用這個鎖, 這就暗示著某個其它的事務正在同樣的可鎖定對象上持有沖突的鎖模式。等待的會話將一直睡眠, 直到另外一個鎖釋放(或者偵測到一個死鎖條件)。一個事務一次最多等待一個鎖。 每個事務都在它持續的時間里在他自己的虛擬事務 ID 上持有一個排他鎖。如果給事務賦予一個永久ID (通常只在事務改變數據庫的狀態時發生),那么它也在它的永久事務ID上持有一個排它鎖,直到它結束。 如果一個事務認為它必須等待另外一個事務,它會以企圖在另外一個事務 ID 上獲取共享鎖的方式實現之 (虛擬的或永久的ID取決于情景)。這個鎖只有在另外一個事務終止并且釋放它的鎖的前提下才能成功。 盡管行是一種可以鎖定的對象,但是有關行級別鎖的信息是存儲在磁盤上的,而不是在內存里, 因此,行級別的鎖通常不會出現在這個視圖里。如果一個事務在等待一個行級別的鎖, 那么它通常會在這個視圖里以等待當前持有該行鎖的永久事務 ID 的方式出現。 建議鎖可以在由單獨一個`bigint`值或兩個integer值組成的鍵上獲得。 一個 `bigint`鍵的高/低位部分分別在`classid`和 `objid` 字段中顯示,并且`objsubid`等于 1 。原先的`bigint`值可以通過 表達式`(classid::bigint &lt;&lt; 32) | objid::bigint`重新組裝。 integer 組成的鍵前半部分在`classid`字段中顯示、后半部分在`objid` 字段中顯示,并且`objsubid`等于 2 。鍵的實際含義取決于用戶的定義。 建議鎖是針對單個數據庫的,因此`database`字段對于建議鎖就顯得很有意義了。 `pg_locks`提供了一個數據庫集群里的所有的鎖的全局視圖, 而不僅僅那些和當前數據庫相關的。盡管它的`relation` 字段可以和`pg_class`.`oid`連接起來以標識被鎖住的關系, 但是這個方法目前只能對在當前數據庫里的關系有用(那些`database` 字段是當前數據庫的 OID 或者零的數據庫)。 `pid`字段可以可以和`pg_stat_activity` 視圖的`pid`字段連接起來獲取持有或者等待持有每個鎖的會話的更多信息。 同樣,如果你使用預備事務,可以把`transaction`字段和`pg_prepared_xacts` 視圖的`transaction`字段連接起來獲取持有鎖的那個預備事務的更多信息。 一個預備事務不能等待任何鎖,但是在運行的時候,它繼續持有它已經請求到的鎖。 `pg_locks`顯示獨立系統的普通鎖管理器和謂詞鎖管理器的數據; 另外,普通鎖管理器細分它的鎖為普通和_fast-path_鎖。這個數據不保證是完全一致的。 當請求視圖時,fast-path鎖的數據(`fastpath` = `true`) 從每個后端一次收集,在整個鎖管器中沒有凍結狀態,所以當收集信息時,可以獲取鎖或釋放鎖。 不過,要注意的是,這些鎖不和任意其他當前鎖發生沖突。在所有后端已經查詢fast-path鎖之后, 剩余的普通鎖管理器作為一個單元,并且一個所有剩余鎖的一致的快照作為原子動作收集。 在解鎖普通鎖管理器之后,謂詞鎖管理器同樣的鎖住,并且所有謂詞鎖作為一個原子動作收集。 因此,除了fast-path鎖,每個鎖管理器將給出一致的結果集,但是因為我們不同時鎖住鎖管理器, 鎖可能在我們訪問普通鎖管理器之后、訪問謂詞鎖管理器之前獲取或釋放。 如果這個視圖訪問的非常頻繁,那么鎖住普通和/或謂詞鎖管理器可能會對數據庫性能有些影響。 鎖只持有從鎖管理器獲取數據所需要的最小的時間,但是這并不能完全消除性能影響的可能性。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看