<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>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                [TOC] # <span style="font-size:15px">**事務快照**</span> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;事務快照是一個數據集,用于存儲有關單個事務在特定時間點是否所有事務都處于活動狀態的信息。在這里,活動事務表示它正在進行或尚未開始。PostgreSQL內部將事務快照的文本表示格式定義為“100:100:”。例如,“100:100:”表示“小于99的TXID為非活性,等于或大于100的TXID為活性”。 可以通過`txid_current_snapshot`函數顯示當前事務的快照。 ``` // active是指transaction in progress or has not yet started db001=# SELECT txid_current_snapshot(); txid_current_snapshot ---------------------- 100:100: // 小于100的txids not active (1 row) // 大于等于100的txids active db001=# SELECT txid_current_snapshot(); txid_current_snapshot ---------------------- 100:104:100,102 (1 row) // 格式:xmin:xmax:xip_list xmin: 最小的active的txid,小于xmin的都是visible的 xmax:第一個還沒分配的txid,大于等于xmax的都是invisible的 xip_list:在xmin和xmax之間active的txid ``` 事務快照表示的示例: ![](https://img.kancloud.cn/d8/97/d897c2f82ac016a8785ecf0c7c92d6f5_1032x371.png) 第一個例子是“100:100:”。 * 等于或小于99的TXID是不活躍的,因為xmin為100。 * 等于或大于100的TXID處于活動狀態,因為xmax為100。 第二個例子是“100:104:100102”。該快照表示以下內容(圖5.8(b)): * 等于或小于99的TXID不具有活性。 * 大于等于104的TXID是活性的。 * TXID 100和102具有活性,因為它們存在于xip列表中,而TXID 101和103不具有活性。 # <span style="font-size:15px">**事務管理器 - transaction manage**</span> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;事務快照由事務管理器(transaction manager)提供。在讀提交隔離級別中,每當執行SQL命令時,事務都會獲得快照;否則(可重復讀取或可序列化),事務僅在執行第一個SQL命令時獲取快照。獲取的事務快照用于元組的可見性檢查。 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;使用獲取的快照進行可見性檢查時,快照中的活動事務必須視為正在進行中,即使它們實際上已提交或中止。此規則很重要,因為它會導致提交讀取和可重復讀取(或可序列化)之間的行為差異。 **實例:** &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;事務管理器始終保存有關當前正在運行的事務的信息。假設三個事務相繼啟動,事務_A和事務_B的隔離級別為讀已提交,事務_C的隔離級別為可重復讀取。 ![](https://img.kancloud.cn/ab/6b/ab6bb80b6c1a2a47946ee6e0cd1bc871_1184x473.png) * T1:事務_A啟動并執行第一個SELECT命令。當執行第一個命令時,事務_A請求此時的txid和快照。在這種情況下,事務管理器分配txid 200,并返回事務快照“200:200:”。 * T2::事務_B啟動并執行第一個SELECT命令。事務管理器分配txid 201,并返回事務快照“200:200:”,因為事務A(txid 200)正在進行中。因此,無法從事務_B中看到事務_A。 * T3:事務_C啟動并執行第一個SELECT命令。事務管理器分配txid 202,并返回事務快照“200:200:”,因此,無法從事務_C中看到事務_A和事務_B。 * T4:事務_A已提交。事務管理器將刪除有關此事務的信息。 * T5:事務_B和事務_C執行各自的select命令。B是RC級別會重新獲取snapshot=201:201,此時B可以看到A; * 事務_C不需要事務快照,因為它處于可重復讀取級別,并使用獲得的快照,即“200:200:”。因此,事務_A仍然不可見于事務_C。 **結論:在Read Committed隔離級別,事務在執行每條SQL時都會從事務管理器獲取快照,其他隔離級別,事務只會在執行第一條SQL命令時獲取一次快照**
                  <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>

                              哎呀哎呀视频在线观看