Re: Parallel Oracle NCR3600

From: David J Natelson <dnatelso_at_us.oracle.com>
Date: 29 Jul 1994 11:35:58 GMT
Message-ID: <31apiu$rnc_at_dcsun4.us.oracle.com>


Just to avoid some confusion...

The parallel server locks being talked about in this thread are NOT Oracle row level locks. The following example will illustrate the difference:

  1. Assume that the Parallel Server is set up so each distributed lock in the DLM (distributed lock manager) supplied by the O/S is defined in the init.ora to lock 1 page/block (the smallest unit that can be passed between nodes is a page/block, not a row). Note: most production systems set the init.ora so each parallel lock controls sets (>1) of blocks because a parallel lock is a resource (i.e. takes up space/ memory in the O/S).
  2. A user types a statement such as update emp set sal=5555 where empno=10 in sqlplus but does not type commit (yet).
  3. A user connected to another node in the parallel server types update emp set sal = 666 where empno = 20
  4. Assume that both rows are on the same block (physically) or the same set of blocks covered by one distributed lock manager lock. You now have what is called a "ping" because the block needs to be moved from one SGA (shared memory) to another machine's SGA to maintain "cache coherency".
  5. The one machine must pass the block to the send machine (to update empno = 20). After the transfer from one SGA to the other, the block still has a row in it (empno=10) that has an Oracle row lock (not committed) in it and the user in step#3 can commit his/her change while the user in step #2 has not decided to commit or rollback (could have done select for update).
  6. The conclusion is that distributed locks are for locking sets of blocks that are being requested to be changed by another server in the parallel server, but you still have row level locking going on for SQL operations.

   DLM Locks != Oracle row locks

7. A good example of using the parllel server would be a 4 node system in

   which 2 nodes are used for DSS and 2 for OLTP and multiple applications    are really runing OLTP so users can log into the appropriate machine, but    still have ONE database to manage. Since all DSS is going on in the shared    memory on 2 servers, these machines will not "ping" any blocks from the    OLTP servers (remember, Oracle has no read locks).

8. Comments about "every implementation" writes to disk to do a ping are not

   correct. While most operating systems (which provide the DLM) handle it this    way, some (e.g. IBM SP2, Ncube, Encore Infinity) have a much higher speed    interconnect than ethernet.

-=:[<{()}>]:=--=:[<{()}>]:=--=:[<{()}>]:=--=:[<{()}>]:=--=:[<{()}>]:=--=:[<{()}
David Natelson Oracle Corporation dnatelso_at_oracle.com
-=:[<{()}>]:=--=:[<{()}>]:=--=:[<{()}>]:=--=:[<{()}>]:=--=:[<{()}>]:=--=:[<{()}
Received on Fri Jul 29 1994 - 13:35:58 CEST

Original text of this message