1<!--Copyright 1999,2008 Oracle.  All rights reserved.-->
2<HTML>
3<HEAD>
4   <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
5   <META NAME="GENERATOR" CONTENT="Mozilla/4.08 [en] (X11; I; FreeBSD 2.2.8-19990120-SNAP i386) [Netscape]">
6</HEAD>
7<BODY>
8
9<H2>
10<A NAME="Memory Pool Commands"></A>Memory Pool Commands</H2>
11Memory pools are used in a manner similar to the other subsystems.&nbsp;
12We create a handle to the pool and&nbsp; then use it for a variety of operations.&nbsp;
13Some of the memory pool commands use the environment instead. Those are
14presented first.
15<P><B>> &lt;env> mpool_stat</B>
16<P>This command returns&nbsp; the statistics associated with the memory
17pool subsystem.&nbsp; It is a direct call to the <A HREF="../../docs/api_c/memp_stat.html">memp_stat</A>
18function.&nbsp; It returns a list of name/value pairs of the DB_MPOOL_STAT
19structure.
20<BR>
21<HR WIDTH="100%">
22<BR><B>> &lt;env> mpool_sync <I>lsn</I></B>
23<P>This command flushes the memory pool for all pages with a log sequence
24number less than <B><I>lsn</I></B>.&nbsp; It is a direct call to the <A HREF="../../docs/api_c/memp_sync.html">memp_sync&nbsp;</A>
25function.&nbsp; It returns either a 0 (for success), a DB error message
26or it throws a Tcl error with a system message.
27<BR>
28<HR WIDTH="100%">
29<BR><B>> &lt;env> mpool_trickle <I>percent</I></B>
30<P>This command tells DB to ensure that at least <B><I>percent</I></B>
31percent of the pages are clean by writing out enough to dirty pages to
32achieve that percentage.&nbsp; It is a direct call to the <A HREF="../../docs/api_c/memp_trickle.html">memp_trickle</A>
33function.&nbsp; The command will return the number of pages actually written.&nbsp;
34It returns either the number of pages on success, or it throws a Tcl error
35with a system message.
36<BR>
37<HR WIDTH="100%">
38<P><B>> &lt;env> mpool [-create] [-nommap] [-rdonly] [-mode <I>mode</I>]
39-pagesize <I>size</I> [<I>file</I>]</B>
40<P>This command creates a new memory pool.&nbsp; It invokes the <A HREF="../../docs/api_c/memp_fopen.html">memp_fopen</A>
41function.&nbsp; After it successfully gets a handle to a memory pool, we
42bind it to a new Tcl command of the form <B><I>$env.mpX</I></B>, where
43X is an integer starting at&nbsp; 0 (e.g. <B>$env.mp0, $env.mp1, </B>etc).&nbsp;
44We use the <I>Tcl_CreateObjCommand()</I> to create the top level memory
45pool functions.&nbsp; It is through this handle that the user can manipulate
46the pool.&nbsp; Internally, the handle we get back from DB will be stored
47as the <I>ClientData</I> portion of the new command set so that future
48memory pool calls will have that handle readily available.&nbsp; Additionally,
49we need to maintain this handle in relation to the environment so that
50if the user calls <A HREF="../../docs/api_tcl/env_close.html">&lt;env> close</A> without closing
51the memory pool we can properly clean up.&nbsp; The arguments are:
52<UL>
53<LI>
54<B><I>file</I></B> is the name of the file to open</LI>
55
56<LI>
57<B>-create </B>selects the DB_CREATE flag to create underlying file</LI>
58
59<LI>
60<B>-mode <I>mode </I></B>sets the permissions of created file to <B><I>mode</I></B></LI>
61
62<LI>
63<B>-nommap</B> selects the DB_NOMMAP flag to disallow using mmap'ed files</LI>
64
65<LI>
66<B>-pagesize</B> sets the underlying file page size to <B><I>size</I></B></LI>
67
68<LI>
69<B>-rdonly </B>selects the DB_RDONLY flag for read only access</LI>
70</UL>
71
72<HR WIDTH="100%">
73<BR><B>> &lt;mp> close</B>
74<P>This command closes the memory pool.&nbsp; It is a direct call to the
75<A HREF="../../docs/api_c/memp_fclose.html">memp_close</A>
76function.&nbsp; It returns either a 0 (for success), a DB error message
77or it throws a Tcl error with a system message.
78<P>Additionally, since the handle is no longer valid, we will call
79<I>Tcl_DeleteCommand()
80</I>so
81that further uses of the handle will be dealt with properly by Tcl itself.&nbsp;
82We must also remove the reference to this handle from the environment.&nbsp;
83We will go through the list of pinned pages that were acquired by the <A HREF="#> <mp> get">get</A>
84command and
85<A HREF="#> <pg> put">put</A> them back.
86<HR WIDTH="100%">
87<BR><B>> &lt;mp> fsync</B>
88<P>This command flushes all of the file's dirty pages to disk.&nbsp; It
89is a direct call to the <A HREF="../../docs/api_c/memp_fsync.html">memp_fsync</A>
90function.&nbsp; It returns either a 0 (for success), a DB error message
91or it throws a Tcl error with a system message.
92<HR WIDTH="100%">
93<BR><A NAME="> <mp> get"></A><B>> &lt;mp> get [-create] [-last] [-new]
94[<I>pgno</I>]</B>
95<P>This command gets the&nbsp; <B><I>pgno </I></B>page from the memory
96pool.&nbsp; It invokes the <A HREF="../../docs/api_c/memp_fget.html">memp_fget</A>
97function and possibly the <A HREF="../../docs/api_c/memp_fset.html">memp_fset</A>
98function if any options are chosen to set the page characteristics.&nbsp;
99After it successfully gets a handle to a page,&nbsp; we bind it to and
100return a new Tcl command of the form <B><I>$env.mpN.pX</I></B>, where X
101is an integer starting at&nbsp; 0 (e.g. <B>$env.mp0.p0, $env.mp1.p0, </B>etc).&nbsp;
102We use the <I>Tcl_CreateObjCommand()</I> to create the top level page functions.&nbsp;
103It is through this handle that the user can manipulate the page.&nbsp;
104Internally, the handle we get back from DB will be stored as the <I>ClientData</I>
105portion of the new command set.&nbsp; We need to store this handle in&nbsp;
106relation to the memory pool handle so that if the memory pool is closed,
107we will <A HREF="#> <pg> put">put</A> back the pages (setting the discard
108flag) and delete that set of commands.
109<P>The arguments are:
110<UL>
111<LI>
112<B>-create </B>selects the DB_MPOOL_CREATE flag&nbsp; to create the page
113if it does not exist.</LI>
114
115<LI>
116<B>-last</B> selects the DB_MPOOL_LAST flag to return the last page in
117the file</LI>
118
119<LI>
120<B>-new</B> selects the DB_MPOOL_NEW flag to create a new page</LI>
121</UL>
122
123<HR WIDTH="100%">
124<BR><B>> &lt;pg> pgnum</B>
125<P>This command returns the page number associated with this memory pool
126page.&nbsp; Primarily it will be used after an <A HREF="#> <mp> get">&lt;mp>
127get</A> call.
128<BR>
129<HR WIDTH="100%"><B>> &lt;pg> pgsize</B>
130<P>This command returns the page size associated with this memory pool
131page.&nbsp; Primarily it will be used after an <A HREF="#> <mp> get">&lt;mp>
132get</A> call.
133<BR>
134<HR WIDTH="100%"><B>> &lt;pg> set [-clean] [-dirty] [-discard]</B>
135<P>This command sets the characteristics of the page.&nbsp; It is a direct
136call to the <A HREF="../../docs/api_c/memp_fset.html">memp_fset</A> function.&nbsp;
137It returns either a 0 (for success), a DB error message or it throws a
138Tcl error with a system message.&nbsp; The arguments are:
139<UL>
140<LI>
141<B>-clean</B> selects the DB_MPOOL_CLEAN flag to indicate this is a clean
142page</LI>
143
144<LI>
145<B>-dirty</B> selects the DB_MPOOL_DIRTY flag to indicate this page should
146be flushed before eviction</LI>
147
148<LI>
149<B>-discard</B> selects the DB_MPOOL_DISCARD flag to indicate this page
150is unimportant</LI>
151</UL>
152
153<HR WIDTH="100%">
154<BR><A NAME="> <pg> put"></A><B>> &lt;pg> put [-clean] [-dirty] [-discard]</B>
155<P>This command will put back the page to the memory pool.&nbsp; It is
156a direct call to the <A HREF="../../docs/api_c/memp_fput.html">memp_fput</A>
157function.&nbsp; It returns either a 0 (for success), a DB error message
158or it throws a Tcl error with a system message. Additionally, since the
159handle is no longer valid, we will call
160<I>Tcl_DeleteCommand()
161</I>so that
162further uses of the handle will be dealt with properly by Tcl itself.&nbsp;
163We must also remove the reference to this handle from the memory pool.
164<P>The arguments are:
165<UL>
166<LI>
167<B>-clean</B> selects the DB_MPOOL_CLEAN flag to indicate this is a clean
168page</LI>
169
170<LI>
171<B>-dirty</B> selects the DB_MPOOL_DIRTY flag to indicate this page should
172be flushed before eviction</LI>
173
174<LI>
175<B>-discard</B> selects the DB_MPOOL_DISCARD flag to indicate this page
176is unimportant</LI>
177</UL>
178
179<HR WIDTH="100%">
180<BR><B>> &lt;pg> init <I>val|string</I></B>
181<P>This command initializes the page to the <B><I>val</I></B> given or
182places the <B><I>string</I></B> given at the beginning of the page.&nbsp;
183It returns a 0 for success or it throws a Tcl error with an error message.
184<P>
185<HR WIDTH="100%">
186<BR><B>> &lt;pg> is_setto <I>val|string</I></B>
187<P>This command verifies the page contains the <B><I>val</I></B> given
188or checks that the <B>string</B> given is at the beginning of the page.&nbsp;
189It returns a 1 if the page is correctly set to the value and a 0 otherwise.
190