|
Server : Apache/2.2.2 (Fedora) System : Linux App1.pathumtani.go.th 2.6.20-1.2320.fc5smp #1 SMP Tue Jun 12 19:40:16 EDT 2007 i686 User : apache ( 48) PHP Version : 5.2.9 Disable Function : NONE Directory : /proc/self/root/usr/share/doc/postgresql-8.1.9/html/ |
Upload File : |
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<HTML
><HEAD
><TITLE
>Concurrency Control</TITLE
><META
NAME="GENERATOR"
CONTENT="Modular DocBook HTML Stylesheet Version 1.79"><LINK
REV="MADE"
HREF="mailto:pgsql-docs@postgresql.org"><LINK
REL="HOME"
TITLE="PostgreSQL 8.1.9 Documentation"
HREF="index.html"><LINK
REL="UP"
TITLE="The SQL Language"
HREF="sql.html"><LINK
REL="PREVIOUS"
TITLE="Examining Index Usage"
HREF="indexes-examine.html"><LINK
REL="NEXT"
TITLE="Transaction Isolation"
HREF="transaction-iso.html"><LINK
REL="STYLESHEET"
TYPE="text/css"
HREF="stylesheet.css"><META
HTTP-EQUIV="Content-Type"
CONTENT="text/html; charset=ISO-8859-1"><META
NAME="creation"
CONTENT="2007-04-20T04:40:08"></HEAD
><BODY
CLASS="CHAPTER"
><DIV
CLASS="NAVHEADER"
><TABLE
SUMMARY="Header navigation table"
WIDTH="100%"
BORDER="0"
CELLPADDING="0"
CELLSPACING="0"
><TR
><TH
COLSPAN="5"
ALIGN="center"
VALIGN="bottom"
>PostgreSQL 8.1.9 Documentation</TH
></TR
><TR
><TD
WIDTH="10%"
ALIGN="left"
VALIGN="top"
><A
HREF="indexes-examine.html"
ACCESSKEY="P"
>Prev</A
></TD
><TD
WIDTH="10%"
ALIGN="left"
VALIGN="top"
><A
HREF="indexes.html"
>Fast Backward</A
></TD
><TD
WIDTH="60%"
ALIGN="center"
VALIGN="bottom"
></TD
><TD
WIDTH="10%"
ALIGN="right"
VALIGN="top"
><A
HREF="performance-tips.html"
>Fast Forward</A
></TD
><TD
WIDTH="10%"
ALIGN="right"
VALIGN="top"
><A
HREF="transaction-iso.html"
ACCESSKEY="N"
>Next</A
></TD
></TR
></TABLE
><HR
ALIGN="LEFT"
WIDTH="100%"></DIV
><DIV
CLASS="CHAPTER"
><H1
><A
NAME="MVCC"
></A
>Chapter 12. Concurrency Control</H1
><DIV
CLASS="TOC"
><DL
><DT
><B
>Table of Contents</B
></DT
><DT
>12.1. <A
HREF="mvcc.html#MVCC-INTRO"
>Introduction</A
></DT
><DT
>12.2. <A
HREF="transaction-iso.html"
>Transaction Isolation</A
></DT
><DD
><DL
><DT
>12.2.1. <A
HREF="transaction-iso.html#XACT-READ-COMMITTED"
>Read Committed Isolation Level</A
></DT
><DT
>12.2.2. <A
HREF="transaction-iso.html#XACT-SERIALIZABLE"
>Serializable Isolation Level</A
></DT
></DL
></DD
><DT
>12.3. <A
HREF="explicit-locking.html"
>Explicit Locking</A
></DT
><DD
><DL
><DT
>12.3.1. <A
HREF="explicit-locking.html#LOCKING-TABLES"
>Table-Level Locks</A
></DT
><DT
>12.3.2. <A
HREF="explicit-locking.html#LOCKING-ROWS"
>Row-Level Locks</A
></DT
><DT
>12.3.3. <A
HREF="explicit-locking.html#LOCKING-DEADLOCKS"
>Deadlocks</A
></DT
></DL
></DD
><DT
>12.4. <A
HREF="applevel-consistency.html"
>Data Consistency Checks at the Application Level</A
></DT
><DT
>12.5. <A
HREF="locking-indexes.html"
>Locking and Indexes</A
></DT
></DL
></DIV
><A
NAME="AEN15289"
></A
><P
> This chapter describes the behavior of the
<SPAN
CLASS="PRODUCTNAME"
>PostgreSQL</SPAN
> database system when two or
more sessions try to access the same data at the same time. The
goals in that situation are to allow efficient access for all
sessions while maintaining strict data integrity. Every developer
of database applications should be familiar with the topics covered
in this chapter.
</P
><DIV
CLASS="SECT1"
><H1
CLASS="SECT1"
><A
NAME="MVCC-INTRO"
>12.1. Introduction</A
></H1
><A
NAME="AEN15295"
></A
><P
> Unlike traditional database systems which use locks for concurrency control,
<SPAN
CLASS="PRODUCTNAME"
>PostgreSQL</SPAN
>
maintains data consistency by using a multiversion model
(Multiversion Concurrency Control, <ACRONYM
CLASS="ACRONYM"
>MVCC</ACRONYM
>).
This means that while querying a database each transaction sees
a snapshot of data (a <I
CLASS="FIRSTTERM"
>database version</I
>)
as it was some
time ago, regardless of the current state of the underlying data.
This protects the transaction from viewing inconsistent data that
could be caused by (other) concurrent transaction updates on the same
data rows, providing <I
CLASS="FIRSTTERM"
>transaction isolation</I
>
for each database session.
</P
><P
> The main advantage to using the <ACRONYM
CLASS="ACRONYM"
>MVCC</ACRONYM
> model of
concurrency control rather than locking is that in
<ACRONYM
CLASS="ACRONYM"
>MVCC</ACRONYM
> locks acquired for querying (reading) data
do not conflict with locks acquired for writing data, and so
reading never blocks writing and writing never blocks reading.
</P
><P
> Table- and row-level locking facilities are also available in
<SPAN
CLASS="PRODUCTNAME"
>PostgreSQL</SPAN
> for applications that cannot
adapt easily to <ACRONYM
CLASS="ACRONYM"
>MVCC</ACRONYM
> behavior. However, proper
use of <ACRONYM
CLASS="ACRONYM"
>MVCC</ACRONYM
> will generally provide better
performance than locks.
</P
></DIV
></DIV
><DIV
CLASS="NAVFOOTER"
><HR
ALIGN="LEFT"
WIDTH="100%"><TABLE
SUMMARY="Footer navigation table"
WIDTH="100%"
BORDER="0"
CELLPADDING="0"
CELLSPACING="0"
><TR
><TD
WIDTH="33%"
ALIGN="left"
VALIGN="top"
><A
HREF="indexes-examine.html"
ACCESSKEY="P"
>Prev</A
></TD
><TD
WIDTH="34%"
ALIGN="center"
VALIGN="top"
><A
HREF="index.html"
ACCESSKEY="H"
>Home</A
></TD
><TD
WIDTH="33%"
ALIGN="right"
VALIGN="top"
><A
HREF="transaction-iso.html"
ACCESSKEY="N"
>Next</A
></TD
></TR
><TR
><TD
WIDTH="33%"
ALIGN="left"
VALIGN="top"
>Examining Index Usage</TD
><TD
WIDTH="34%"
ALIGN="center"
VALIGN="top"
><A
HREF="sql.html"
ACCESSKEY="U"
>Up</A
></TD
><TD
WIDTH="33%"
ALIGN="right"
VALIGN="top"
>Transaction Isolation</TD
></TR
></TABLE
></DIV
></BODY
></HTML
>