List:Commits« Previous MessageNext Message »
From:jon Date:May 18 2007 4:02pm
Subject:svn commit - mysqldoc@docsrva: r6534 - trunk/refman-4.1
View as plain text  
Author: jstephens
Date: 2007-05-18 18:02:12 +0200 (Fri, 18 May 2007)
New Revision: 6534

Log:

Rework Cluster 4.1 Limitations section.



Modified:
   trunk/refman-4.1/mysql-cluster-limitations-working.xml


Modified: trunk/refman-4.1/mysql-cluster-limitations-working.xml
===================================================================
--- trunk/refman-4.1/mysql-cluster-limitations-working.xml	2007-05-18 16:01:17 UTC (rev 6533)
+++ trunk/refman-4.1/mysql-cluster-limitations-working.xml	2007-05-18 16:02:12 UTC (rev 6534)
Changed blocks: 3, Lines Added: 1168, Lines Deleted: 708; 77189 bytes

@@ -6,614 +6,993 @@
   %all.entities;
 ]>
 <section id="mysql-cluster-limitations">
+  
+  <title>Known Limitations of MySQL Cluster</title>
+  
+  <indexterm>
+    <primary>MySQL Cluster limitations</primary>
+  </indexterm>
+  
+  <indexterm>
+    <primary>limitations of MySQL Cluster</primary>
+  </indexterm>
+  
+  <para>
+    In the sections that follow, we discuss known limitations in MySQL
+    &current-series; Cluster releases as compared with the features
+    available when using the <literal>MyISAM</literal> and
+    <literal>InnoDB</literal> storage engines. Currently, there are no
+    plans to address these in coming releases of MySQL &current-series;;
+    however, we will attempt to supply fixes for these issues in
+    subsequent release series. If you check the <quote>Cluster</quote>
+    category in the MySQL bugs database at 
+    <ulink url="http://bugs.mysql.com"/>, you can find known bugs which
+    (if marked <quote>&current-series;</quote>) we intend to correct in
+    upcoming releases of MySQL &current-series;.
+  </para>
+  
+  <para>
+    This information is intended to be complete with respect to the
+    conditions just set forth. You can report any discrepancies that you
+    encounter to the MySQL bugs database using the instructions given in
+    <xref linkend="bug-reports"/>. If we do not plan to fix the problem
+    in MySQL &current-series;, we will add it to the list.
+  </para>
 
-    <title>Known Limitations of MySQL Cluster</title>
+    
+  
+  
+  <section id="mysql-cluster-limitations-syntax">
 
+    <title>Non-Compliance In SQL Syntax</title>
+
     <indexterm>
       <primary>MySQL Cluster limitations</primary>
+      <secondary>syntax</secondary>
     </indexterm>
 
-    <indexterm>
-      <primary>limitations of MySQL Cluster</primary>
-<!-- <see>MySQL Cluster limitations</see> -->
-    </indexterm>
-
     <para>
-      In this section, we provide a list of known limitations in MySQL
-      Cluster releases in the &current-series;.x series compared to
-      features available when using the <literal>MyISAM</literal> and
-      <literal>InnoDB</literal> storage engines. Currently, there are no
-      plans to address these in coming releases of MySQL
-      &current-series;; however, we will attempt to supply fixes for
-      these issues in subsequent release series. If you check the
-      <quote>Cluster</quote> category in the MySQL bugs database at
-      <ulink url="http://bugs.mysql.com"/>, you can find known bugs
-      which (if marked <quote>&current-series;</quote>) we intend to
-      correct in upcoming releases of MySQL &current-series;.
-    </para>
+      Some SQL statements relating to certain MySQL features produce
+      errors when used with <literal>NDB</literal> tables, as described
+      in the following list:
 
-    <para>
-      The list here is intended to be complete with respect to the
-      conditions just set forth. You can report any discrepancies that
-      you encounter to the MySQL bugs database using the instructions
-      given in <xref linkend="bug-reports"/>. If we do not plan to fix
-      the problem in MySQL &current-series;, we will add it to the list.
-    </para>
+      <itemizedlist>
 
-    <itemizedlist>
+        <listitem>
+          <formalpara>
 
-      <listitem>
-        <indexterm>
-          <primary>MySQL Cluster limitations</primary>
-          <secondary>syntax</secondary>
-        </indexterm>
+            <title>Temporary tables</title>
 
-        <para>
-          <emphasis role="bold">Noncompliance in syntax</emphasis>
-          (resulting in errors when running existing applications):
-        </para>
-
-        <itemizedlist>
-
-          <listitem>
             <para>
-              Temporary tables are not supported.
+              Temporary tables are not supported. Trying either to
+              create a temporary table that uses the
+              <literal>NDB</literal> storage engine or to alter an
+              existing temporary table to use <literal>NDB</literal>
+              fails with the error <errortext>Table storage engine
+              'ndbcluster' does not support the create option
+              'TEMPORARY'</errortext>.
             </para>
-          </listitem>
 
-          <listitem>
-            <para>
-              Not all charsets and collations are supported; see
-              <xref linkend="mysql-cluster-news-4-1-6"/>, for a list of
-              those that are supported.
-            </para>
-          </listitem>
+          </formalpara>
+        </listitem>
 
-          <listitem>
-            <para>
-              There are no prefix indexes; only entire fields can be
-              indexed.
-            </para>
-          </listitem>
+        <listitem>
+          <formalpara>
 
-          <listitem>
+            <title>Indexes and keys in <literal>NDB</literal> tables</title>
+
             <para>
-              You cannot create indexes on <literal>NDB</literal> table
-              columns that use any of the <literal>TEXT</literal> or
-              <literal>BLOB</literal> data types.
-            </para>
+              Keys and indexes on MySQL Cluster tables are subject to
+              the following limitations:
 
-            <para>
-              The <literal>NDB</literal> storage engine also does not
-              support <literal>FULLTEXT</literal> indexes (these are
-              supported by <literal>MyISAM</literal> only).
+              <itemizedlist>
+
+                <listitem>
+                  <para>
+                    You cannot create indexes on <literal>NDB</literal>
+                    table columns that use any of the
+                    <literal>TEXT</literal> or <literal>BLOB</literal>
+                    data types.
+                  </para>
+                </listitem>
+
+                <listitem>
+                  <para>
+                    The <literal>NDB</literal> storage engine does not
+                    support <literal>FULLTEXT</literal> indexes, which
+                    are possible for <literal>MyISAM</literal> tables
+                    only.
+                  </para>
+
+                  <para>
+                    However, you can create indexes on
+                    <literal>VARCHAR</literal> columns of
+                    <literal>NDB</literal> tables.
+                  </para>
+                </listitem>
+                
+                <listitem>
+                  <para>
+                    There are no prefix indexes; only entire fields can be
+                    indexed.
+                  </para>
+                </listitem>
+
+                <listitem>
+                  <para>
+                    A <literal>BIT</literal> column cannot be a primary
+                    key, unique key, or index, nor can it be part of a
+                    composite primary key, unique key, or index.
+                  </para>
+                </listitem>
+
+                <listitem>
+                  <formalpara>
+
+                    <title>Duplicate keys</title>
+
+                    <para>
+                      A duplicate key error returns the error message
+                      <errortext>ERROR 23000: Can't write; duplicate key
+                      in table
+                      '<replaceable>tbl_name</replaceable>'</errortext>.
+                    </para>
+
+                  </formalpara>
+                </listitem>
+
+                <listitem>
+                  <formalpara>
+
+                    <title><literal>AUTO_INCREMENT</literal> columns</title>
+
+                    <para>
+                      Like other MySQL storage engines, the
+                      <literal>NDB</literal> storage engine can handle a
+                      maximum of one <literal>AUTO_INCREMENT</literal>
+                      column per table. However, in the case of a
+                      Cluster table with no explicit primary key, an
+                      <literal>AUTO_INCREMENT</literal> column is
+                      automatically defined and used as a
+                      <quote>hidden</quote> primary key. For this
+                      reason, you cannot define a table that has an
+                      explicit <literal>AUTO_INCREMENT</literal> column
+                      unless that column is also declared using the
+                      <literal>PRIMARY KEY</literal> option. Attempting
+                      to create a table with an
+                      <literal>AUTO_INCREMENT</literal> column that is
+                      not the table's primary key, and using the
+                      <literal>NDB</literal> storage engine, fails with
+                      an error.
+                    </para>
+
+                  </formalpara>
+                </listitem>
+
+              </itemizedlist>
             </para>
 
+          </formalpara>
+        </listitem>
+
+        <listitem>
+          <formalpara>
+
+            <title>MySQL Cluster and geometry data types</title>
+
+            <indexterm>
+              <primary>MySQL Cluster limitations</primary>
+              <secondary>geometry data types</secondary>
+            </indexterm>
+
             <para>
-              However, you can index <literal>VARCHAR</literal> columns
-              of <literal>NDB</literal> tables.
+              Geometry datatypes (<literal>WKT</literal> and
+              <literal>WKB</literal>) are supported in
+              <literal>NDB</literal> tables in MySQL &current-series;.
+              However, spatial indexes are not supported.
             </para>
-          </listitem>
 
-          <listitem>
+          </formalpara>
+        </listitem>
+        
+        <listitem>
+          <formalpara>
+            <title>Character set support</title>
             <para>
-              A <literal>BIT</literal> column cannot be a primary key,
-              unique key, or index, nor can it be part of a composite
-              primary key, unique key, or index.
-            </para>
-          </listitem>
+              
+                Not all charsets and collations are supported; see
+                <xref linkend="mysql-cluster-news-4-1-6"/>, for a list of
+                those that are supported.
+              </para>
+          </formalpara>
+          
+          <formalpara>
+            <title>Character set directory</title>
+            <para>
+              
+              
+                
+                  <command>ndbd</command> searches only the default path
+                  (typically
+                  <filename>/usr/local/mysql/share/mysql/charsets</filename>)
+                  for character sets. Thus, it is not possible to install
+                  MySQL with Cluster support in a different path (in the
+                  case of the <filename>.tar.gz</filename> archives, other
+                  than <filename>/usr/local/mysql</filename>) if character
+                  sets that are not compiled into the MySQL Server need to
+                  be used.
+                
+              </para>
+          </formalpara>
+          
+          
+        </listitem>
 
-          <listitem>
+        <listitem>
+          <formalpara>
+
+            <title>Row-based replication</title>
+
             <indexterm>
               <primary>MySQL Cluster limitations</primary>
-              <secondary>geometry datatypes</secondary>
+              <secondary>replication</secondary>
             </indexterm>
 
             <para>
-              Geometry datatypes (<literal>WKT</literal> and
-              <literal>WKB</literal>) are not supported.
+              When using row-based replication with MySQL Cluster,
+              binary logging cannot be disabled. That is, the
+              <literal>NDB</literal> storage engine ignores the value of
+              <literal>SQL_LOG_BIN</literal>. (Bug #16680)
             </para>
-          </listitem>
 
-          <listitem>
+          </formalpara>
+        </listitem>
+
+        <listitem>
+          <formalpara>
+
+            <title><literal>auto_increment_increment</literal> and
+              <literal>auto_increment_offset</literal></title>
+
             <para>
-              <literal>INSERT IGNORE</literal> is supported only for
-              primary keys, but not for unique keys. One possible
-              workaround is to remove the constraint by dropping the
-              unique index, perform any inserts, and then add the unique
-              index again. (Bug #17431)
+              The <literal>auto_increment_increment</literal> and
+              <literal>auto_increment_offset</literal> server system
+              variables are not supported for Cluster replication.
             </para>
-          </listitem>
 
-        </itemizedlist>
-      </listitem>
+          </formalpara>
+        </listitem>
 
-      <listitem>
-        <indexterm>
-          <primary>MySQL Cluster limitations</primary>
-          <secondary>causing errors</secondary>
-        </indexterm>
+      </itemizedlist>
+    </para>
 
-        <para>
-          <emphasis role="bold">Non-compliance in limits or
-          behavior</emphasis> (may result in errors when running
-          existing applications):
-        </para>
+  </section>
 
-        <itemizedlist>
+  <section id="mysql-cluster-limitations-limits">
 
-          <listitem>
-            <indexterm>
-              <primary>memory use</primary>
-              <secondary>in MySQL Cluster</secondary>
-            </indexterm>
+    <title>Limits and Differences from Standard MySQL Limits</title>
 
-            <indexterm>
-              <primary>MySQL Cluster</primary>
-              <secondary>memory usage and recovery</secondary>
-            </indexterm>
+    <indexterm>
+      <primary>MySQL Cluster limitations</primary>
+      <secondary>and differences from standard MySQL limits</secondary>
+    </indexterm>
 
-            <indexterm>
-              <primary><literal>DELETE</literal></primary>
-              <secondary>and MySQL Cluster</secondary>
-            </indexterm>
+    <para>
+      In this section, we list limits found in MySQL Cluster that either
+      differ from limits found in, or that are not found in, standard
+      MySQL.
 
-            <indexterm>
-              <primary><literal>DROP TABLE</literal></primary>
-              <secondary>and MySQL Cluster</secondary>
-            </indexterm>
+      <itemizedlist>
 
-            <indexterm>
-              <primary><literal>TRUNCATE</literal></primary>
-              <secondary>and MySQL Cluster</secondary>
-            </indexterm>
+        <listitem>
+          <indexterm>
+            <primary>memory use</primary>
+            <secondary>in MySQL Cluster</secondary>
+          </indexterm>
 
-            <para>
-              <emphasis role="bold">Memory Usage</emphasis>:
-            </para>
+          <indexterm>
+            <primary>MySQL Cluster</primary>
+            <secondary>memory usage and recovery</secondary>
+          </indexterm>
 
+          <indexterm>
+            <primary><literal>DELETE</literal></primary>
+            <secondary>and MySQL Cluster</secondary>
+          </indexterm>
+
+          <indexterm>
+            <primary><literal>DROP TABLE</literal></primary>
+            <secondary>and MySQL Cluster</secondary>
+          </indexterm>
+
+          <indexterm>
+            <primary><literal>TRUNCATE</literal></primary>
+            <secondary>and MySQL Cluster</secondary>
+          </indexterm>
+
+          <formalpara>
+
+            <title>Memory usage and recovery</title>
+
             <para>
               Memory comsumed when data is inserted into an
               <literal>NDB</literal> table is not automatically
               recovered when deleted, as it is with other storage
               engines. Instead, the following rules hold true:
-            </para>
 
-            <itemizedlist>
+              <itemizedlist>
 
-              <listitem>
-                <para>
-                  A <literal>DELETE</literal> statement on an
-                  <literal>NDB</literal> table makes the memory formerly
-                  used by the deleted rows available for re-use by
-                  inserts on the same table only. The memory cannot be
-                  used by other <literal>NDB</literal> tables.
-                </para>
-              </listitem>
+                <listitem>
+                  <para>
+                    A <literal>DELETE</literal> statement on an
+                    <literal>NDB</literal> table makes the memory
+                    formerly used by the deleted rows available for
+                    re-use by inserts on the same table only. This
+                    memory cannot be used by other
+                    <literal>NDB</literal> tables.
+                  </para>
+                </listitem>
 
-              <listitem>
-                <para>
-                  A <literal>DROP TABLE</literal> or
-                  <literal>TRUNCATE</literal> operation on an
-                  <literal>NDB</literal> table frees the memory that was
-                  used by this table for re-use by any
-                  <literal>NDB</literal> table &mdash; either by the
-                  same table or by another <literal>NDB</literal> table.
-                </para>
+                <listitem>
+                  <para>
+                    A <literal>DROP TABLE</literal> or
+                    <literal>TRUNCATE</literal> operation on an
+                    <literal>NDB</literal> table frees the memory that
+                    was used by this table for re-use by any
+                    <literal>NDB</literal> table, either by the same
+                    table or by another <literal>NDB</literal> table.
+                  </para>
 
-                <para>
-                  (Recall that <literal>TRUNCATE</literal> drops and
-                  re-creates the table. See <xref linkend="truncate"/>.)
-                </para>
+                  <note>
+                    <para>
+                      Recall that <literal>TRUNCATE</literal> drops and
+                      re-creates the table. See
+                      <xref linkend="truncate"/>.
+                    </para>
+                  </note>
 
-                <para>
-                  Memory freed by <literal>DELETE</literal> operations
-                  but still allocated to a specific table can also be
-                  made available for general re-use by performing a
-                  rolling restart of the cluster. See
-                  <xref linkend="mysql-cluster-rolling-restart"/>.
-                </para>
-              </listitem>
+                  <para>
+                    Memory freed by <literal>DELETE</literal> operations
+                    but still allocated to a specific table can also be
+                    made available for general re-use by performing a
+                    rolling restart of the cluster. See
+                    <xref linkend="mysql-cluster-rolling-restart"/>.
+                  </para>
+                </listitem>
 
-            </itemizedlist>
-          </listitem>
+                <listitem>
+                  <formalpara>
 
-          <listitem>
-            <para>
-              <emphasis role="bold">Error Reporting</emphasis>:
+                    <title>Limits imposed by the cluster's configuration</title>
+
+                    <indexterm>
+                      <primary>MySQL Cluster limitations</primary>
+                      <secondary>imposed by configuration</secondary>
+                    </indexterm>
+
+                    <para>
+                      A number of hard limits exist which are
+                      configurable, but available main memory in the
+                      cluster sets limits. See the complete list of
+                      configuration parameters in
+                      <xref linkend="mysql-cluster-config-file"/>. Most
+                      configuration parameters can be upgraded online.
+                      These hard limits include:
+
+                      <itemizedlist>
+
+                        <listitem>
+                          <para>
+                            Database memory size and index memory size
+                            (<literal>DataMemory</literal> and
+                            <literal>IndexMemory</literal>,
+                            respectively).
+                          </para>
+
+                          <para>
+                            <literal>DataMemory</literal> is allocated
+                            as 32KB pages. As each
+                            <literal>DataMemory</literal> page is used,
+                            it is assigned to a specific table; once
+                            allocated, this memory cannot be freed
+                            except by dropping the table.
+                          </para>
+
+                          <para>
+                            See
+                            <xref linkend="mysql-cluster-ndbd-definition"/>,
+                            for further information about
+                            <literal>DataMemory</literal> and
+                            <literal>IndexMemory</literal>.
+                          </para>
+                        </listitem>
+
+                        <listitem>
+                          <para>
+                            The maximum number of operations that can be
+                            performed per transaction is set using the
+                            configuration parameters
+                            <literal>MaxNoOfConcurrentOperations</literal>
+                            and
+                            <literal>MaxNoOfLocalOperations</literal>.
+                          </para>
+
+                          <note>
+                            <para>
+                              Bulk loading, <literal>TRUNCATE
+                              TABLE</literal>, and <literal>ALTER
+                              TABLE</literal> are handled as special
+                              cases by running multiple transactions,
+                              and so are not subject to this limitation.
+                            </para>
+                          </note>
+                        </listitem>
+
+                        <listitem>
+                          <para>
+                            Different limits related to tables and
+                            indexes. For example, the maximum number of
+                            ordered indexes per table is determined by
+                            <literal>MaxNoOfOrderedIndexes</literal>.
+                          </para>
+                        </listitem>
+
+                      </itemizedlist>
+                    </para>
+
+                  </formalpara>
+                </listitem>
+
+                <listitem>
+                  <formalpara>
+
+                    <title>Memory usage</title>
+
+                    <para>
+                      All Cluster table rows are of fixed length. This
+                      means (for example) that if a table has one or
+                      more <literal>VARCHAR</literal> fields containing
+                      only relatively small values, more memory and disk
+                      space is required when using the
+                      <literal>NDB</literal> storage engine than would
+                      be the case for the same table and data using the
+                      <literal>MyISAM</literal> engine. (In other words,
+                      in the case of a <literal>VARCHAR</literal>
+                      column, the column requires the same amount of
+                      storage as a <literal>CHAR</literal> column of the
+                      same size.)
+                    </para>
+
+                  </formalpara>
+                </listitem>
+
+                <listitem>
+                  <formalpara>
+
+                    <title>Node and data object maximums</title>
+
+                    <para>
+                      The following limits apply to numbers of cluster
+                      nodes and metadata objects:
+
+                      <itemizedlist>
+
+                        <listitem>
+                          <para>
+                            The maximum number of data nodes is 48.
+                          </para>
+                        </listitem>
+
+                        <listitem>
+                          <para>
+                            The total maximum number of nodes in a MySQL
+                            Cluster is 63. This number includes all SQL
+                            nodes (MySQL Servers), API nodes
+                            (applications accessing the cluster other
+                            than MySQL servers), data nodes, and
+                            management servers.
+                          </para>
+                        </listitem>
+
+                        <listitem>
+                          <para>
+                            
+                            
+                              
+                                The maximum number of metadata objects is limited to 1600,
+                                including database tables, system tables, indexes and
+                                <literal>BLOB</literal> columns.
+                              
+                            
+                          </para>
+                        </listitem>
+
+                      </itemizedlist>
+                    </para>
+
+                  </formalpara>
+                </listitem>
+
+              </itemizedlist>
             </para>
 
-            <itemizedlist>
+          </formalpara>
+        </listitem>
 
-              <listitem>
-                <para>
-                  A duplicate key error returns the error message
-                  <errortext>ERROR 23000: Can't write; duplicate key in
-                  table
-                  '<replaceable>tbl_name</replaceable>'</errortext>.
-                </para>
-              </listitem>
+      </itemizedlist>
+    </para>
 
-              <listitem>
-                <para>
-                  Like other MySQL storage engines, the
-                  <literal>NDB</literal> storage engine can handle a
-                  maximum of one <literal>AUTO_INCREMENT</literal>
-                  column per table. However, in the case of a Cluster
-                  table with no explicit primary key, an
-                  <literal>AUTO_INCREMENT</literal> column is
-                  automatically defined and used as a
-                  <quote>hidden</quote> primary key. For this reason,
-                  you cannot define a table that has an explicit
-                  <literal>AUTO_INCREMENT</literal> column unless that
-                  column is also declared using the <literal>PRIMARY
-                  KEY</literal> option.
-                </para>
+  </section>
 
+  <section id="mysql-cluster-limitations-transactions">
+
+    <title>Limits Relating to Transaction Handling</title>
+
+    <indexterm>
+      <primary>MySQL Cluster limitations</primary>
+      <secondary>transactions</secondary>
+    </indexterm>
+
+    <para>
+      A number of limitations exist in MySQL Cluster with regard to the
+      handling of transactions. These include the following:
+
+      <itemizedlist>
+
+        <listitem>
+          <formalpara>
+
+            <title>Transaction isolation level</title>
+
+            <para>
+              The <literal>NDBCLUSTER</literal> storage engine supports
+              only the <literal>READ COMMITTED</literal> transaction
+              isolation level.
+
+              <important>
                 <para>
-                  Attempting to create a table with an
-                  <literal>AUTO_INCREMENT</literal> column that is not
-                  the table's primary key, and using the
-                  <literal>NDB</literal> storage engine, fails with an
-                  error.
+                  If a <literal>SELECT</literal> from a Cluster table
+                  includes a <literal>BLOB</literal> or
+                  <literal>TEXT</literal> column, the <literal>READ
+                  COMMITTED</literal> transaction isolation level is
+                  converted to a read with read lock. This is done to
+                  guarantee consistency, due to the fact that parts of
+                  the values stored in columns of these types are
+                  actually read from a separate table.
                 </para>
-              </listitem>
+              </important>
+            </para>
 
-            </itemizedlist>
-          </listitem>
+          </formalpara>
+        </listitem>
 
-          <listitem>
-            <indexterm>
-              <primary>MySQL Cluster limitations</primary>
-              <secondary>transactions</secondary>
-            </indexterm>
+        <listitem>
+          <formalpara>
 
+            <title>Rollbacks</title>
+
             <para>
-              <emphasis role="bold">Transaction Handling</emphasis>:
+              There is no partial rollback of transactions. A duplicate
+              key or similar error rolls back the entire transaction.
             </para>
 
-            <itemizedlist>
+          </formalpara>
+        </listitem>
 
-              <listitem>
-                <para>
-                  <literal>NDB Cluster</literal> supports only the
-                  <literal>READ COMMITTED</literal> transaction
-                  isolation level.
-                </para>
-              </listitem>
+        <listitem>
+          <formalpara>
 
-              <listitem>
-                <para>
-                  There is no partial rollback of transactions. A
-                  duplicate key or similar error results in a rollback
-                  of the entire transaction.
-                </para>
-              </listitem>
+            <title>Transactions and memory usage</title>
 
-              <listitem>
-                <para>
-                  <emphasis role="bold">Important</emphasis>: If a
-                  <literal>SELECT</literal> from a Cluster table
-                  includes a <literal>BLOB</literal>,
-                  <literal>TEXT</literal>, or <literal>VARCHAR</literal>
-                  column, the <literal>READ COMMITTED</literal>
-                  transaction isolation level is converted to a read
-                  with read lock. This is done to guarantee consistency,
-                  due to the fact that parts of the values stored in
-                  columns of these types are actually read from a
-                  separate table.
-                </para>
-              </listitem>
+            <indexterm>
+              <primary>MySQL Cluster limitations</primary>
+              <secondary>memory usage and transaction handling</secondary>
+            </indexterm>
 
-              <listitem>
-                <para>
-                  As noted elsewhere in this chapter, MySQL Cluster does
-                  not handle large transactions well; it is better to
-                  perform a number of small transactions with a few
-                  operations each than to attempt a single large
-                  transaction containing a great many operations.
-                </para>
+            <indexterm>
+              <primary>MySQL Cluster</primary>
+              <secondary>transaction handling</secondary>
+            </indexterm>
 
-                <para>
-                  Among other considerations, large transactions require
-                  very large amounts of memory. Because of this, the
-                  transactional behaviour of a number of MySQL
-                  statements is effected as described in the following
-                  list:
-                </para>
+            <para>
+              As noted elsewhere in this chapter, MySQL Cluster does not
+              handle large transactions well; it is better to perform a
+              number of small transactions with a few operations each
+              than to attempt a single large transaction containing a
+              great many operations. Among other considerations, large
+              transactions require very large amounts of memory. Because
+              of this, the transactional behaviour of a number of MySQL
+              statements is effected as described in the following list:
 
-                <itemizedlist>
+              <itemizedlist>
 
-                  <listitem>
-                    <para>
-                      <literal>TRUNCATE</literal> is not transactional
-                      when used on <literal>NDB</literal> tables. If a
-                      <literal>TRUNCATE</literal> fails to empty the
-                      table, then it must be re-run until it is
-                      successful.
-                    </para>
-                  </listitem>
+                <listitem>
+                  <para>
+                    <literal>TRUNCATE</literal> is not transactional
+                    when used on <literal>NDB</literal> tables. If a
+                    <literal>TRUNCATE</literal> fails to empty the
+                    table, then it must be re-run until it is
+                    successful.
+                  </para>
+                </listitem>
 
-                  <listitem>
-                    <para>
-                      <literal>DELETE FROM</literal> (even with no
-                      <literal>WHERE</literal> clause)
-                      <emphasis>is</emphasis> transactional. For tables
-                      containing a great many rows, you may find that
-                      performance is improved by using several
-                      <literal>DELETE FROM ... LIMIT ...</literal>
-                      statements to <quote>chunk</quote> the delete
-                      operation. If the objective is to empty the table,
-                      then you may wish to use
-                      <literal>TRUNCATE</literal> instead.
-                    </para>
-                  </listitem>
+                <listitem>
+                  <para>
+                    <literal>DELETE FROM</literal> (even with no
+                    <literal>WHERE</literal> clause)
+                    <emphasis>is</emphasis> transactional. For tables
+                    containing a great many rows, you may find that
+                    performance is improved by using several
+                    <literal>DELETE FROM ... LIMIT ...</literal>
+                    statements to <quote>chunk</quote> the delete
+                    operation. If your objective is to empty the table,
+                    then you may wish to use <literal>TRUNCATE</literal>
+                    instead.
+                  </para>
+                </listitem>
 
-                  <listitem>
+                <listitem>
+                  <formalpara>
+
+                    <title><literal>LOAD DATA</literal> statements</title>
+
                     <para>
                       <literal>LOAD DATA INFILE</literal> is not
-                      transactional. During such an operation the
-                      <literal>NDB</literal> engine can and does commit
-                      at will.
-                    </para>
+                      transactional when used on <literal>NDB</literal>
+                      tables.
 
-                    <para>
+                      <important>
+                        <para>
+                          When executing a <literal>LOAD DATA
+                          INFILE</literal> statement, the
+                          <literal>NDB</literal> engine can and does
+                          commit at will.
+                        </para>
+                      </important>
+
                       <literal>LOAD DATA FROM MASTER</literal> is not
                       supported in MySQL Cluster.
                     </para>
-                  </listitem>
 
-                  <listitem>
+                  </formalpara>
+                </listitem>
+
+                <listitem>
+                  <formalpara>
+
+                    <title><literal>ALTER TABLE</literal> and transactions</title>
+
                     <para>
-                      When copying a table as part of an <literal>ALTER
-                      TABLE</literal>, the creation of the copy is
-                      non-transactional. (In any case, this operation is
-                      rolled back when the copy is deleted.)
+                      When copying an <literal>NDB</literal> table as
+                      part of an <literal>ALTER TABLE</literal>, the
+                      creation of the copy is non-transactional. (In any
+                      case, this operation is rolled back when the copy
+                      is deleted.)
                     </para>
-                  </listitem>
 
-                </itemizedlist>
-              </listitem>
+                  </formalpara>
+                </listitem>
 
-              <listitem>
-                <para>
-                  <emphasis role="bold">Node Start, Stop, or
-                  Restart:</emphasis>: Starting, stopping, or restarting
-                  a node may give rise to temporary errors causing some
-                  transactions to fail. These include the following
-                  cases:
-                </para>
+              </itemizedlist>
+            </para>
 
-                <itemizedlist>
+          </formalpara>
+        </listitem>
 
-                  <listitem>
-                    <para>
-                      When first starting a node, it is possible that
-                      you may see Error 1204 <errortext>Temporary
-                      failure, distribution changed</errortext> and
-                      similar temporary errors.
-                    </para>
-                  </listitem>
+      </itemizedlist>
+    </para>
 
-                  <listitem>
-                    <para>
-                      The stopping or failure of any data node can
-                      result in a number of different node failure
-                      errors. (However, there should be no aborted
-                      transactions when performing a planned shutdown of
-                      the cluster.)
-                    </para>
-                  </listitem>
+  </section>
 
-                </itemizedlist>
+  <section id="mysql-cluster-limitations-error-handling">
 
-                <para>
-                  In either of these cases, any errors that are
-                  generated must be handled within the application. This
-                  should be done by retrying the transaction.
-                </para>
-              </listitem>
+    <title>Error Handling</title>
 
-            </itemizedlist>
-          </listitem>
+    <indexterm>
+      <primary>MySQL Cluster limitations</primary>
+      <secondary>error handling and reporting</secondary>
+    </indexterm>
 
-          <listitem>
-            <indexterm>
-              <primary>MySQL Cluster limitations</primary>
-              <secondary>imposed by configuration</secondary>
-            </indexterm>
+    <para>
+      Starting, stopping, or restarting a node may give rise to
+      temporary errors causing some transactions to fail. These include
+      the following cases:
 
+      <itemizedlist>
+
+        <listitem>
+          <formalpara>
+
+            <title>Temporary errors</title>
+
             <para>
-              A number of hard limits exist which are configurable, but
-              available main memory in the cluster sets limits. See the
-              complete list of configuration parameters in
-              <xref linkend="mysql-cluster-config-file"/>. Most
-              configuration parameters can be upgraded online. These
-              hard limits include:
+              When first starting a node, it is possible that you may
+              see Error 1204 <errortext>Temporary failure, distribution
+              changed</errortext> and similar temporary errors.
             </para>
 
-            <itemizedlist>
+          </formalpara>
+        </listitem>
 
-              <listitem>
-                <para>
-                  Database memory size and index memory size
-                  (<literal>DataMemory</literal> and
-                  <literal>IndexMemory</literal>, respectively).
-                </para>
+        <listitem>
+          <formalpara>
 
-                <para>
-                  <literal>DataMemory</literal> is allocated as 32KB
-                  pages. As each <literal>DataMemory</literal> page is
-                  used, it is assigned to a specific table; once
-                  allocated, this memory cannot be freed except by
-                  dropping the table.
-                </para>
+            <title>Errors due to node failure</title>
 
-                <para>
-                  See <xref linkend="mysql-cluster-ndbd-definition"/>,
-                  for further information about
-                  <literal>DataMemory</literal> and
-                  <literal>IndexMemory</literal>.
-                </para>
-              </listitem>
+            <para>
+              The stopping or failure of any data node can result in a
+              number of different node failure errors. (However, there
+              should be no aborted transactions when performing a
+              planned shutdown of the cluster.)
+            </para>
 
-              <listitem>
-                <para>
-                  The maximum number of operations that can be performed
-                  per transaction is set using the configuration
-                  parameters
-                  <literal>MaxNoOfConcurrentOperations</literal> and
-                  <literal>MaxNoOfLocalOperations</literal>. Note that
-                  bulk loading, <literal>TRUNCATE TABLE</literal>, and
-                  <literal>ALTER TABLE</literal> are handled as special
-                  cases by running multiple transactions, and so are not
-                  subject to this limitation.
-                </para>
-              </listitem>
+          </formalpara>
+        </listitem>
 
-              <listitem>
-                <para>
-                  Different limits related to tables and indexes. For
-                  example, the maximum number of ordered indexes per
-                  table is determined by
-                  <literal>MaxNoOfOrderedIndexes</literal>.
-                </para>
-              </listitem>
+      </itemizedlist>
+    </para>
 
-            </itemizedlist>
-          </listitem>
+    <para>
+      In either of these cases, any errors that are generated must be
+      handled within the application. This should be done by retrying
+      the transaction.
+    </para>
 
-          <listitem>
-            <indexterm>
-              <primary>MySQL Cluster limitations</primary>
-              <secondary>database objects</secondary>
-            </indexterm>
+    <para>
+      See also <xref linkend="mysql-cluster-limitations-limits"/>.
+    </para>
 
+  </section>
+
+  <section id="mysql-cluster-limitations-database-objects">
+
+    <title>Limits Associated with Database Objects</title>
+
+    <indexterm>
+      <primary>MySQL Cluster limitations</primary>
+      <secondary>database objects</secondary>
+    </indexterm>
+
+    <para>
+      Some database objects such as tables and indexes have different
+      limitations when using the <literal>NDBCLUSTER</literal> storage
+      engine:
+
+      <itemizedlist>
+
+        <listitem>
+          <formalpara>
+
+            <title>Identifiers</title>
+
             <para>
               Database names, table names and attribute names cannot be
-              as long in <literal>NDB</literal> tables as with other
-              table handlers. Attribute names are truncated to 31
+              as long in <literal>NDB</literal> tables as when using
+              other table handlers. Attribute names are truncated to 31
               characters, and if not unique after truncation give rise
               to errors. Database names and table names can total a
-              maximum of 122 characters. (That is, the maximum length
-              for an <literal>NDB Cluster</literal> table name is 122
-              characters less the number of characters in the name of
-              the database of which that table is a part.)
+              maximum of 122 characters. In other words, the maximum
+              length for an <literal>NDB</literal> table name is 122
+              characters, less the number of characters in the name of
+              the database of which that table is a part.
             </para>
-          </listitem>
 
-          <listitem>
+          </formalpara>
+        </listitem>
+
+        <listitem>
+          <formalpara>
+
+            <title>Number of tables</title>
+
             <para>
-              All Cluster table rows are of fixed length. This means
-              (for example) that if a table has one or more
-              <literal>VARCHAR</literal> fields containing only
-              relatively small values, more memory and disk space is
-              required when using the <literal>NDB</literal> storage
-              engine than would be the case for the same table and data
-              using the <literal>MyISAM</literal> engine. (In other
-              words, in the case of a <literal>VARCHAR</literal> column,
-              the column requires the same amount of storage as a
-              <literal>CHAR</literal> column of the same size.)
+              The maximum number of tables in a Cluster database in
+              MySQL 5.0 is limited to 1792.
             </para>
-          </listitem>
 
-          <listitem>
+          </formalpara>
+        </listitem>
+
+        <listitem>
+          <formalpara>
+
+            <title>Attributes per table</title>
+
             <para>
-              The maximum number of metadata objects is limited to 1600,
-              including database tables, system tables, indexes and
-              <literal>BLOB</literal>s.
+              The maximum number of attributes (that is, columns and
+              indexes) per table is limited to 128.
             </para>
-          </listitem>
 
-          <listitem>
+          </formalpara>
+        </listitem>
+
+        <listitem>
+          <formalpara>
+
+            <title>Attributes per key</title>
+
             <para>
-              The maximum number of attributes per table is limited to
-              128.
+              The maximum number of attributes per key is 32.
             </para>
-          </listitem>
 
-          <listitem>
+          </formalpara>
+        </listitem>
+
+        <listitem>
+          <formalpara>
+
+            <title>Row size</title>
+
             <para>
               The maximum permitted size of any one row is 8KB. Note
               that each <literal>BLOB</literal> or
-              <literal>TEXT</literal> column contributes a maximum of
-              256 bytes towards this total.
+              <literal>TEXT</literal> column contributes 256 + 8 = 264
+              bytes towards this total.
             </para>
-          </listitem>
 
-          <listitem>
-            <para>
-              The maximum number of attributes per key is 32.
-            </para>
-          </listitem>
+          </formalpara>
+        </listitem>
 
-        </itemizedlist>
-      </listitem>
+      </itemizedlist>
+    </para>
 
-      <listitem>
-        <indexterm>
-          <primary>MySQL Cluster limitations</primary>
-          <secondary>unsupported features</secondary>
-        </indexterm>
+  </section>
 
-        <para>
-          <emphasis role="bold">Unsupported features</emphasis> (do not
-          cause errors, but are not supported or enforced):
-        </para>
+  <section id="mysql-cluster-limitations-unsupported-missing">
 
+    <title>Unsupported Or Missing Features</title>
+
+    <indexterm>
+      <primary>MySQL Cluster limitations</primary>
+      <secondary>unsupported features</secondary>
+    </indexterm>
+
+    <formalpara>
+
+      <title>Unsupported Features</title>
+
+      <para>
+        A number of features supported by other storage engines are not
+        supported for <literal>NDB</literal> tables. Trying to use any
+        of these features in MySQL Cluster does not cause errors in or
+        of itself; however, errors may occur in applications that
+        expects the features to be supported or enforced:
+
         <itemizedlist>
 
           <listitem>
-            <para>
-              The foreign key construct is ignored, just as it is in
-              <literal>MyISAM</literal> tables.
-            </para>
+            <formalpara>
+
+              <title>Foreign key constraints</title>
+
+              <para>
+                The foreign key construct is ignored, just as it is in
+                <literal>MyISAM</literal> tables.
+              </para>
+
+            </formalpara>
           </listitem>
 
           <listitem>
-            <para>
-              Savepoints and rollbacks to savepoints are ignored as in
-              <literal>MyISAM</literal>.
-            </para>
+            <formalpara>
+
+              <title>Savepoints and rollbacks</title>
+
+              <para>
+                Savepoints and rollbacks to savepoints are ignored as in
+                <literal>MyISAM</literal>.
+              </para>
+
+            </formalpara>
           </listitem>
 
           <listitem>
-            <para>
-              <literal>OPTIMIZE</literal> operations are not supported.
-            </para>
+            <formalpara>
+
+              <title><literal>OPTIMIZE</literal> operations</title>
+
+              <para>
+                <literal>OPTIMIZE</literal> operations are not
+                supported.
+              </para>
+
+            </formalpara>
           </listitem>
 
           <listitem>
-            <para>
-              <literal>LOAD TABLE ... FROM MASTER</literal> is not
-              supported.
-            </para>
+            <formalpara>
+
+              <title><literal>LOAD TABLE ... FROM MASTER</literal></title>
+
+              <para>
+                <literal>LOAD TABLE ... FROM MASTER</literal> is not
+                supported.
+              </para>
+
+            </formalpara>
           </listitem>
 
         </itemizedlist>
-      </listitem>
+      </para>
 
-      <listitem>
-        <indexterm>
-          <primary>MySQL Cluster limitations</primary>
-          <secondary>performance</secondary>
-        </indexterm>
+    </formalpara>
 
-        <para>
-          <emphasis role="bold">Performance and limitation-related
-          issues</emphasis>:
-        </para>
+    <formalpara>
 
+      <title>Missing Features</title>
+
+      <para>
         <itemizedlist>
 
           <listitem>
-            <para>
-              The query cache is disabled, since it is not invalidated
-              if an update occurs on a different MySQL server.
-            </para>
+            <formalpara>
+
+              <title>Transaction isolation</title>
+
+              <para>
+                The only supported isolation level is <literal>READ
+                COMMITTED</literal>. (InnoDB supports <literal>READ
+                COMMITTED</literal>, <literal>READ
+                UNCOMMITTED</literal>, <literal>REPEATABLE
+                READ</literal>, and <literal>SERIALIZABLE</literal>.)
+                See
+                <xref linkend="mysql-cluster-backup-troubleshooting"/>,
+                for information on how this can affect backup and
+                restore of Cluster databases.
+              </para>
+
+            </formalpara>
           </listitem>
 
           <listitem>
+            <formalpara>
+
+              <title>Durability</title>
+
+              <para>
+                No durable commits on disk. Commits are replicated, but
+                there is no guarantee that logs are flushed to disk on
+                commit.
+              </para>
+
+            </formalpara>
+          </listitem>
+
+        </itemizedlist>
+      </para>
+
+    </formalpara>
+
+    <note>
+      <para>
+        See <xref linkend="mysql-cluster-limitations-transactions"/>,
+        for more information relating to limitations on transaction
+        handling in <literal>NDB</literal>.
+      </para>
+    </note>
+
+  </section>
+
+  <section id="mysql-cluster-limitations-performance">
+
+    <title>Limitations Relating to Performance</title>
+
+    <indexterm>
+      <primary>MySQL Cluster limitations</primary>
+      <secondary>performance</secondary>
+    </indexterm>
+
+    <para>
+      The following performance issues are specific to or especially
+      pronounced in MySQL Cluster:
+
+      <itemizedlist>
+
+        <listitem>
+          <formalpara>
+
+            <title>Range scans</title>
+
             <para>
               There are query performance issues due to sequential
               access to the <literal>NDB</literal> storage engine; it is

@@ -621,233 +1000,220 @@
               it is with either <literal>MyISAM</literal> or
               <literal>InnoDB</literal>.
             </para>
-          </listitem>
 
-          <listitem>
+          </formalpara>
+        </listitem>
+        
+        <listitem>
+          <formalpara>
+          <title>Query cache</title>
+          
             <para>
-              The <literal>Records in range</literal> statistic is not
+              The query cache is disabled, since it is not invalidated
+              if an update occurs on a different MySQL server.
+            </para>
+          </formalpara>
+        </listitem>
+
+        <listitem>
+          <formalpara>
+
+            <title>Reliability of <literal>Records in range</literal></title>
+
+            <para>
+              The <literal>Records in range</literal> statistic is
+              available but is not completely tested or officially
               supported. This may result in non-optimal query plans in
               some cases. If necessary, you can employ <literal>USE
               INDEX</literal> or <literal>FORCE INDEX</literal> to alter
-              the execution plan. See <xref linkend="index-hints"/>.
+              the execution plan. See <xref linkend="index-hints"/>, for
+              more information on how to do this.
             </para>
-          </listitem>
 
-          <listitem>
+          </formalpara>
+        </listitem>
+
+        <listitem>
+          <formalpara>
+
+            <title>Unique hash indexes</title>
+
             <para>
               Unique hash indexes created with <literal>USING
               HASH</literal> cannot be used for accessing a table if
               <literal>NULL</literal> is given as part of the key.
             </para>
-          </listitem>
 
-          <listitem>
-            <para>
-              <literal>SQL_LOG_BIN</literal> has no effect on data
-              operations; however, it is supported for schema
-              operations.
-            </para>
+          </formalpara>
+        </listitem>
 
-            <para>
-              MySQL Cluster cannot produce a binlog for tables having
-              <literal>BLOB</literal> columns but no primary key.
-            </para>
+        <listitem>
+          <formalpara>
 
+            <title>Binary logging</title>
+
             <para>
-              Only the following schema operations are logged in a
-              cluster binlog which is <emphasis>not</emphasis> on the
-              <command>mysqld</command> executing the statement:
-            </para>
+              MySQL Cluster has the following limitations or
+              restrictions with regard to binary logging:
 
-            <itemizedlist>
+              <itemizedlist>
 
-              <listitem>
-                <para>
-                  <literal>CREATE TABLE</literal>
-                </para>
-              </listitem>
+                <listitem>
+                  <para>
+                    <literal>SQL_LOG_BIN</literal> has no effect on data
+                    operations; however, it is supported for schema
+                    operations.
+                  </para>
+                </listitem>
 
-              <listitem>
-                <para>
-                  <literal>ALTER TABLE</literal>
-                </para>
-              </listitem>
+                <listitem>
+                  <para>
+                    MySQL Cluster cannot produce a binlog for tables
+                    having <literal>BLOB</literal> columns but no
+                    primary key.
+                  </para>
+                </listitem>
 
-              <listitem>
-                <para>
-                  <literal>DROP TABLE</literal>
-                </para>
-              </listitem>
+                <listitem>
+                  <para>
+                    Only the following schema operations are logged in a
+                    cluster binlog which is <emphasis>not</emphasis> on
+                    the <command>mysqld</command> executing the
+                    statement:
 
-              <listitem>
-                <para>
-                  <literal>CREATE DATABASE</literal>
-                </para>
-              </listitem>
+                    <itemizedlist>
 
-              <listitem>
-                <para>
-                  <literal>DROP DATABASE</literal>
-                </para>
-              </listitem>
+                      <listitem>
+                        <para>
+                          <literal>CREATE TABLE</literal>
+                        </para>
+                      </listitem>
 
-            </itemizedlist>
-          </listitem>
+                      <listitem>
+                        <para>
+                          <literal>ALTER TABLE</literal>
+                        </para>
+                      </listitem>
 
-          <listitem>
-            <para>
-              <command>ndbd</command> searches only the default path
-              (typically
-              <filename>/usr/local/mysql/share/mysql/charsets</filename>)
-              for character sets. Thus, it is not possible to install
-              MySQL with Cluster support in a different path (in the
-              case of the <filename>.tar.gz</filename> archives, other
-              than <filename>/usr/local/mysql</filename>) if character
-              sets that are not compiled into the MySQL Server need to
-              be used.
+                      <listitem>
+                        <para>
+                          <literal>DROP TABLE</literal>
+                        </para>
+                      </listitem>
+
+                      <listitem>
+                        <para>
+                          <literal>CREATE DATABASE</literal> /
+                          <literal>CREATE SCHEMA</literal>
+                        </para>
+                      </listitem>
+
+                      <listitem>
+                        <para>
+                          <literal>DROP DATABASE</literal> /
+                          <literal>DROP SCHEMA</literal>
+                        </para>
+                      </listitem>
+
+                    </itemizedlist>
+                  </para>
+                </listitem>
+
+              </itemizedlist>
             </para>
-          </listitem>
 
-        </itemizedlist>
-      </listitem>
+          </formalpara>
+        </listitem>
 
-      <listitem>
-        <indexterm>
-          <primary>MySQL Cluster limitations</primary>
-          <secondary>unsupported features</secondary>
-        </indexterm>
+      </itemizedlist>
+    </para>
 
-        <para>
-          <emphasis role="bold">Missing features</emphasis>:
-        </para>
+  </section>
 
-        <itemizedlist>
+  <section id="mysql-cluster-limitations-exclusive-to-cluster">
 
-          <listitem>
-            <para>
-              The only supported isolation level is <literal>READ
-              COMMITTED</literal>. (InnoDB supports <literal>READ
-              COMMITTED</literal>, <literal>READ UNCOMMITTED</literal>,
-              <literal>REPEATABLE READ</literal>, and
-              <literal>SERIALIZABLE</literal>.) See
-              <xref linkend="mysql-cluster-backup-troubleshooting"/>,
-              for information on how this can affect backup and restore
-              of Cluster databases.
-            </para>
-          </listitem>
+    <title>Issues Exclusive to MySQL Cluster</title>
 
-          <listitem>
-            <para>
-              No durable commits on disk. Commits are replicated, but
-              there is no guarantee that logs are flushed to disk on
-              commit.
-            </para>
-          </listitem>
+    <indexterm>
+      <primary>MySQL Cluster limitations</primary>
+      <secondary>implementation</secondary>
+    </indexterm>
 
-        </itemizedlist>
-      </listitem>
+    <para>
+      The following are limitations specific to the
+      <literal>NDBCLUSTER</literal> storage engine, and do not occur
+      with <literal>MyISAM</literal> or <literal>InnoDB</literal>:
 
-      <listitem>
-        <indexterm>
-          <primary>MySQL Cluster limitations</primary>
-          <secondary>multiple MySQL servers</secondary>
-        </indexterm>
+      <itemizedlist>
 
-        <para>
-          <emphasis role="bold">Problems relating to multiple MySQL
-          servers</emphasis> (not relating to <literal>MyISAM</literal>
-          or <literal>InnoDB</literal>):
-        </para>
+        <listitem>
+          <formalpara>
 
-        <itemizedlist>
+            <title>Machine architecture</title>
 
-          <listitem>
             <para>
-              <literal>ALTER TABLE</literal> is not fully locking when
-              running multiple MySQL servers (no distributed table
-              lock).
-            </para>
-          </listitem>
+              The following issues relate to physical architecture of
+              cluster hosts:
 
-          <listitem>
-            <para>
-              MySQL replication will not work correctly if updates are
-              done on multiple MySQL servers. However, if the database
-              partitioning scheme is done at the application level and
-              no transactions take place across these partitions,
-              replication can be made to work.
-            </para>
-          </listitem>
+              <itemizedlist>
 
-          <listitem>
-            <para>
-              Autodiscovery of databases is not supported for multiple
-              MySQL servers accessing the same MySQL Cluster. However,
-              autodiscovery of tables is supported in such cases. What
-              this means is that after a database named
-              <replaceable>db_name</replaceable> is created or imported
-              using one MySQL server, you should issue a <literal>CREATE
-              DATABASE <replaceable>db_name</replaceable></literal>
-              statement on each additional MySQL server that accesses
-              the same MySQL Cluster. Once this has been done for a
-              given MySQL server, that server should be able to detect
-              the database tables without error.
-            </para>
-          </listitem>
+                <listitem>
+                  <para>
+                    All machines used in the cluster must have the same
+                    architecture. That is, all machines hosting nodes
+                    must be either big-endian or little-endian, and you
+                    cannot use a mixture of both. For example, you
+                    cannot have a management node running on a PowerPC
+                    which directs a data node that is running on an x86
+                    machine. This restriction does not apply to machines
+                    simply running <command>mysql</command> or other
+                    clients that may be accessing the cluster's SQL
+                    nodes.
+                  </para>
+                </listitem>
 
-          <listitem>
-            <para>
-              DDL operations are not node failure safe. If a node fails
-              while trying to peform one of these (such as
-              <literal>CREATE TABLE</literal> or <literal>ALTER
-              TABLE</literal>), the data dictionary is locked and no
-              further DDL statements can be executed without restarting
-              the cluster.
-            </para>
-          </listitem>
+                <listitem>
+                  <formalpara>
 
-        </itemizedlist>
-      </listitem>
+                    <title>Adding and dropping of data nodes</title>
 
-      <listitem>
-        <indexterm>
-          <primary>MySQL Cluster limitations</primary>
-          <secondary>implementation</secondary>
-        </indexterm>
+                    <para>
+                      Online adding or dropping of data nodes is not
+                      currently possible. In such cases, the entire
+                      cluster must be restarted.
+                    </para>
 
-        <para id="mysql-cluster-limitations-exclusive-to-cluster">
-          <emphasis role="bold">Issues exclusive to MySQL
-          Cluster</emphasis> (not related to <literal>MyISAM</literal>
-          or <literal>InnoDB</literal>):
-        </para>
+                  </formalpara>
+                </listitem>
 
-        <itemizedlist>
+                <listitem>
+                  <formalpara>
 
-          <listitem>
-            <para>
-              All machines used in the cluster must have the same
-              architecture. That is, all machines hosting nodes must be
-              either big-endian or little-endian, and you cannot use a
-              mixture of both. For example, you cannot have a management
-              node running on a PowerPC which directs a data node that
-              is running on an x86 machine. This restriction does not
-              apply to machines simply running <command>mysql</command>
-              or other clients that may be accessing the cluster's SQL
-              nodes.
-            </para>
-          </listitem>
+                    <title>Backup and restore between architectures</title>
 
-          <listitem>
-            <para>
-              It is also not possible to perform a Cluster backup and
-              restore between different architectures. For example, you
-              cannot back up a cluster running on a big-endian platform
-              and then restore from that backup to a cluster running on
-              a little-endian system. (Bug #19255)
+                    <para>
+                      It is also not possible to perform a Cluster
+                      backup and restore between different
+                      architectures. For example, you cannot back up a
+                      cluster running on a big-endian platform and then
+                      restore from that backup to a cluster running on a
+                      little-endian system. (Bug #19255)
+                    </para>
+
+                  </formalpara>
+                </listitem>
+
+              </itemizedlist>
             </para>
-          </listitem>
 
-          <listitem>
+          </formalpara>
+        </listitem>
+
+        <listitem>
+          <formalpara>
+
+            <title>Online schema changes</title>
+
             <para>
               It is not possible to make online schema changes such as
               those accomplished using <literal>ALTER TABLE</literal> or

@@ -861,119 +1227,213 @@
               issue a <literal>FLUSH TABLES</literal> statement to force
               the cluster to pick up the change.)
             </para>
-          </listitem>
 
+          </formalpara>
+        </listitem>
+
+      </itemizedlist>
+    </para>
+
+  </section>
+
+  <section id="mysql-cluster-limitations-multiple-nodes">
+
+    <title>Limitations Relating to Multiple Cluster Nodes</title>
+
+    <formalpara>
+
+      <title>Multiple SQL nodes</title>
+
+      <indexterm>
+        <primary>MySQL Cluster limitations</primary>
+        <secondary>multiple MySQL servers</secondary>
+      </indexterm>
+
+      <para>
+        The following are issues relating to the use of multiple MySQL
+        servers as MySQL Cluster SQL nodes, and are specific to the
+        <literal>NDBCLUSTER</literal> storage engine:
+
+        <itemizedlist>
+
           <listitem>
-            <para>
-              Online adding or dropping of nodes is not possible (the
-              cluster must be restarted in such cases).
-            </para>
+            <formalpara>
+
+              <title><literal>ALTER TABLE</literal> operations</title>
+
+              <para>
+                <literal>ALTER TABLE</literal> is not fully locking when
+                running multiple MySQL servers (no distributed table
+                lock).
+              </para>
+
+            </formalpara>
           </listitem>
 
           <listitem>
-            <para>
-              While it is possible to run multiple cluster processes
-              concurrently on a single host, it is not always advisable
-              to do so for reasons of performance and high availability,
-              as well as other considerations. In particular, we do not
-              in MySQL &current-series; support for production use any
-              MySQL Cluster deployment in which more than one
-              <command>ndbd</command> process is run on a single
-              physical machine.
-            </para>
+            <formalpara>
 
-            <para>
-              We may support multiple data nodes per host in a future
-              MySQL release, following additional testing. However, in
-              MySQL &current-series;, such configurations can be
-              considered experimental only.
-            </para>
+              <title>Replication</title>
+
+              <para>
+                MySQL replication will not work correctly if updates are
+                done on multiple MySQL servers. However, if the database
+                partitioning scheme is done at the application level and
+                no transactions take place across these partitions,
+                replication can be made to work.
+              </para>
+
+            </formalpara>
           </listitem>
 
           <listitem>
-            <indexterm>
-              <primary>MySQL Cluster limitations</primary>
-              <secondary>multiple management servers</secondary>
-            </indexterm>
+            <formalpara>
 
-            <para>
-              When using multiple management servers:
-            </para>
+              <title>Database autodiscovery</title>
 
-            <itemizedlist>
+              <para>
+                Autodiscovery of databases is not supported for multiple
+                MySQL servers accessing the same MySQL Cluster. However,
+                autodiscovery of tables is supported in such cases. What
+                this means is that after a database named
+                <replaceable>db_name</replaceable> is created or
+                imported using one MySQL server, you should issue a
+                <literal>CREATE DATABASE
+                <replaceable>db_name</replaceable></literal> statement
+                on each additional MySQL server that accesses the same
+                MySQL Cluster. (As of MySQL 5.0.2, you may also use
+                <literal>CREATE SCHEMA
+                <replaceable>db_name</replaceable></literal>.) Once this
+                has been done for a given MySQL server, that server
+                should be able to detect the database tables without
+                error.
+              </para>
 
-              <listitem>
-                <para>
-                  You must give nodes explicit IDs in connectstrings
-                  because automatic allocation of node IDs does not work
-                  across multiple management servers.
-                </para>
-              </listitem>
+            </formalpara>
+          </listitem>
 
-              <listitem>
-                <para>
-                  You must take extreme care to have the same
-                  configurations for all management servers. No special
-                  checks for this are performed by the cluster.
-                </para>
-              </listitem>
+          <listitem>
+            <formalpara>
 
-              <listitem>
-                <para>
-                  Prior to MySQL 4.1.15, all data nodes had to be
-                  restarted after bringing up the cluster in order for
-                  the management nodes to be able to see one another.
-                </para>
+              <title>DDL operations</title>
 
-                <para>
-                  (See Bug #12307 and Bug #13070 for more information.)
-                </para>
-              </listitem>
+              <para>
+                DDL operations are not node failure safe. If a node
+                fails while trying to peform one of these (such as
+                <literal>CREATE TABLE</literal> or <literal>ALTER
+                TABLE</literal>), the data dictionary is locked and no
+                further DDL statements can be executed without
+                restarting the cluster.
+              </para>
 
-            </itemizedlist>
+            </formalpara>
           </listitem>
 
+        </itemizedlist>
+      </para>
+
+    </formalpara>
+
+    <formalpara>
+
+      <title>Multiple management nodes</title>
+
+      <indexterm>
+        <primary>MySQL Cluster limitations</primary>
+        <secondary>multiple management servers</secondary>
+      </indexterm>
+
+      <para>
+        When using multiple management servers:
+
+        <itemizedlist>
+
           <listitem>
             <para>
-              Multiple network addresses per data node are not
-              supported. Use of these is liable to cause problems: In
-              the event of a data node failure, an SQL node waits for
-              confirmation that the data node went down but never
-              receives it because another route to that data node
-              remains open. This can effectively make the cluster
-              inoperable.
+              You must give nodes explicit IDs in connectstrings because
+              automatic allocation of node IDs does not work across
+              multiple management servers.
             </para>
+          </listitem>
 
+          <listitem>
             <para>
-              It is possible to use multiple network hardware interfaces
-              (such as Ethernet cards) for a single data node, but these
-              must be bound to the same address. This also means that it
-              not possible to use more than one <literal>[TCP]</literal>
-              section per connection in the
-              <literal>config.ini</literal> file. See
-              <xref linkend="mysql-cluster-tcp-definition"/>, for more
-              information.
+              You must take extreme care to have the same configurations
+              for all management servers. No special checks for this are
+              performed by the cluster.
             </para>
           </listitem>
 
           <listitem>
             <para>
-              The maximum number of data nodes is 48.
+              Prior to MySQL 4.1.15, all data nodes had to be restarted
+              after bringing up the cluster in order for the management
+              nodes to be able to see one another.
             </para>
-          </listitem>
 
-          <listitem>
             <para>
-              The total maximum number of nodes in a MySQL Cluster is
-              63. This number includes all SQL nodes (MySQL Servers),
-              API nodes (applications accessing the cluster other than
-              MySQL servers), data nodes, and management servers.
+              (See Bug #12307 and Bug #13070 for more information.)
             </para>
           </listitem>
 
         </itemizedlist>
-      </listitem>
+      </para>
 
-    </itemizedlist>
+    </formalpara>
 
+    <formalpara>
+
+      <title>Multiple data node processes</title>
+
+      <para>
+        While it is possible to run multiple cluster processes
+        concurrently on a single host, it is not always advisable to do
+        so for reasons of performance and high availability, as well as
+        other considerations. In particular, in MySQL &current-series;,
+        we do not support for production use any MySQL Cluster
+        deployment in which more than one <command>ndbd</command>
+        process is run on a single physical machine.
+
+        <note>
+          <para>
+            We may support multiple data nodes per host in a future
+            MySQL release, following additional testing. However, in
+            MySQL &current-series;, such configurations can be
+            considered experimental only.
+          </para>
+        </note>
+      </para>
+
+    </formalpara>
+
+    <formalpara>
+
+      <title>Multiple network addresses</title>
+
+      <para>
+        Multiple network addresses per data node are not supported. Use
+        of these is liable to cause problems: In the event of a data
+        node failure, an SQL node waits for confirmation that the data
+        node went down but never receives it because another route to
+        that data node remains open. This can effectively make the
+        cluster inoperable.
+
+        <note>
+          <para>
+            It is possible to use multiple network hardware
+            <emphasis>interfaces</emphasis> (such as Ethernet cards) for
+            a single data node, but these must be bound to the same
+            address. This also means that it not possible to use more
+            than one <literal>[TCP]</literal> section per connection in
+            the <literal>config.ini</literal> file. See
+            <xref linkend="mysql-cluster-tcp-definition"/>, for more
+            information.
+          </para>
+        </note>
+      </para>
+
+    </formalpara>
+
   </section>
+
+  </section>


Thread
svn commit - mysqldoc@docsrva: r6534 - trunk/refman-4.1jon18 May