mirror of
https://github.com/MariaDB/server.git
synced 2026-05-15 19:37:16 +02:00
Merge kboortz@bk-internal.mysql.com:/home/bk/mysql-4.1
into mysql.com:/Users/kent/mysql/bk/mysql-4.1-distcheck configure.in: Auto merged
This commit is contained in:
commit
34bbdf0613
37 changed files with 742 additions and 76 deletions
|
|
@ -36,6 +36,7 @@ private:
|
|||
|
||||
static Uint32 getType(const Uint32 &);
|
||||
static Uint32 getSize(const Uint32 &);
|
||||
static Uint32 getSizeInBytes(const Uint32 &);
|
||||
static Uint32 getSizeInWords(const Uint32 &);
|
||||
static Uint32 getArrayType(const Uint32 &);
|
||||
static Uint32 getArraySize(const Uint32 &);
|
||||
|
|
@ -79,6 +80,7 @@ private:
|
|||
#define AD_SIZE_SHIFT (4)
|
||||
#define AD_SIZE_MASK (7)
|
||||
|
||||
#define AD_SIZE_IN_BYTES_SHIFT (3)
|
||||
#define AD_SIZE_IN_WORDS_OFFSET (31)
|
||||
#define AD_SIZE_IN_WORDS_SHIFT (5)
|
||||
|
||||
|
|
@ -185,6 +187,13 @@ AttributeDescriptor::getSize(const Uint32 & desc){
|
|||
return (desc >> AD_SIZE_SHIFT) & AD_SIZE_MASK;
|
||||
}
|
||||
|
||||
inline
|
||||
Uint32
|
||||
AttributeDescriptor::getSizeInBytes(const Uint32 & desc){
|
||||
return (getArraySize(desc) << getSize(desc))
|
||||
>> AD_SIZE_IN_BYTES_SHIFT;
|
||||
}
|
||||
|
||||
inline
|
||||
Uint32
|
||||
AttributeDescriptor::getSizeInWords(const Uint32 & desc){
|
||||
|
|
|
|||
|
|
@ -700,6 +700,27 @@ Dbtup::checkUpdateOfPrimaryKey(Uint32* updateBuffer, Tablerec* const regTabPtr)
|
|||
Uint32 attrDescriptorIndex = regTabPtr->tabDescriptor + (attributeId << ZAD_LOG_SIZE);
|
||||
Uint32 attrDescriptor = tableDescriptor[attrDescriptorIndex].tabDescr;
|
||||
Uint32 attributeOffset = tableDescriptor[attrDescriptorIndex + 1].tabDescr;
|
||||
|
||||
Uint32 xfrmBuffer[1 + MAX_KEY_SIZE_IN_WORDS * 1]; // strxfrm_multiply == 1
|
||||
Uint32 charsetFlag = AttributeOffset::getCharsetFlag(attributeOffset);
|
||||
if (charsetFlag) {
|
||||
Uint32 csPos = AttributeOffset::getCharsetPos(attributeOffset);
|
||||
CHARSET_INFO* cs = regTabPtr->charsetArray[csPos];
|
||||
Uint32 sizeInBytes = AttributeDescriptor::getSizeInBytes(attrDescriptor);
|
||||
Uint32 sizeInWords = AttributeDescriptor::getSizeInWords(attrDescriptor);
|
||||
const uchar* srcPtr = (uchar*)&updateBuffer[1];
|
||||
uchar* dstPtr = (uchar*)&xfrmBuffer[1];
|
||||
Uint32 n =
|
||||
(*cs->coll->strnxfrm)(cs, dstPtr, sizeInBytes, srcPtr, sizeInBytes);
|
||||
// pad with blanks (unlikely) and zeroes to match NDB API behaviour
|
||||
while (n < sizeInBytes)
|
||||
dstPtr[n++] = 0x20;
|
||||
while (n < 4 * sizeInWords)
|
||||
dstPtr[n++] = 0;
|
||||
xfrmBuffer[0] = ahIn.m_value;
|
||||
updateBuffer = xfrmBuffer;
|
||||
}
|
||||
|
||||
ReadFunction f = regTabPtr->readFunctionArray[attributeId];
|
||||
|
||||
AttributeHeader::init(&attributeHeader, attributeId, 0);
|
||||
|
|
@ -707,7 +728,7 @@ Dbtup::checkUpdateOfPrimaryKey(Uint32* updateBuffer, Tablerec* const regTabPtr)
|
|||
tMaxRead = MAX_KEY_SIZE_IN_WORDS;
|
||||
|
||||
bool tmp = tXfrmFlag;
|
||||
tXfrmFlag = false;
|
||||
tXfrmFlag = true;
|
||||
ndbrequire((this->*f)(&keyReadBuffer[0], ahOut, attrDescriptor, attributeOffset));
|
||||
tXfrmFlag = tmp;
|
||||
ndbrequire(tOutBufIndex == ahOut->getDataSize());
|
||||
|
|
|
|||
|
|
@ -26,24 +26,33 @@ use HTML::Template;
|
|||
# BUGS
|
||||
# ----
|
||||
# - enum/set is 0 byte storage! Woah - efficient!
|
||||
# - DECIMAL is 0 byte storage. A bit too efficient.
|
||||
# - some float stores come out weird (when there's a comma e.g. 'float(4,1)')
|
||||
# - no disk data values
|
||||
# - computes the storage requirements of views (and probably MERGE)
|
||||
# - ignores character sets.
|
||||
|
||||
my $template = HTML::Template->new(filename => 'ndb_size.tmpl',
|
||||
die_on_bad_params => 0);
|
||||
die_on_bad_params => 0)
|
||||
or die "Could not open ndb_size.tmpl.";
|
||||
|
||||
my $dbh;
|
||||
|
||||
if(@ARGV < 3 || $ARGV[0] eq '--usage' || $ARGV[0] eq '--help')
|
||||
{
|
||||
print STDERR "Usage:\n";
|
||||
print STDERR "\tndb_size.pl database hostname user password\n\n";
|
||||
print STDERR "If you need to specify a port number, use host:port\n\n";
|
||||
exit(1);
|
||||
}
|
||||
|
||||
{
|
||||
my $database= $ARGV[0];
|
||||
my $hostname= $ARGV[1];
|
||||
my $port= $ARGV[2];
|
||||
my $user= $ARGV[3];
|
||||
my $password= $ARGV[4];
|
||||
my $dsn = "DBI:mysql:database=$database;host=$hostname;port=$port";
|
||||
$dbh= DBI->connect($dsn, $user, $password);
|
||||
my $user= $ARGV[2];
|
||||
my $password= $ARGV[3];
|
||||
my $dsn = "DBI:mysql:database=$database;host=$hostname";
|
||||
$dbh= DBI->connect($dsn, $user, $password) or exit(1);
|
||||
$template->param(db => $database);
|
||||
$template->param(dsn => $dsn);
|
||||
}
|
||||
|
|
@ -55,6 +64,14 @@ my $tables = $dbh->selectall_arrayref("show tables");
|
|||
|
||||
my @table_size;
|
||||
|
||||
my @dbDataMemory;
|
||||
my @dbIndexMemory;
|
||||
my @NoOfAttributes;
|
||||
my @NoOfIndexes;
|
||||
my @NoOfTables;
|
||||
$NoOfTables[$_]{val} = @{$tables} foreach 0..$#releases;
|
||||
|
||||
|
||||
sub align {
|
||||
my($to,@unaligned) = @_;
|
||||
my @aligned;
|
||||
|
|
@ -68,9 +85,8 @@ foreach(@{$tables})
|
|||
{
|
||||
my $table= @{$_}[0];
|
||||
my @columns;
|
||||
my $info= $dbh->selectall_hashref("describe ".$dbh->quote($table),"Field");
|
||||
my @count = $dbh->selectrow_array("select count(*) from "
|
||||
.$dbh->quote($table));
|
||||
my $info= $dbh->selectall_hashref('describe `'.$table.'`',"Field");
|
||||
my @count = $dbh->selectrow_array('select count(*) from `'.$table.'`');
|
||||
my %columnsize; # used for index calculations
|
||||
|
||||
# We now work out the DataMemory usage
|
||||
|
|
@ -132,14 +148,17 @@ foreach(@{$tables})
|
|||
my $fixed= 1+$size;
|
||||
my @dynamic=$dbh->selectrow_array("select avg(length("
|
||||
.$dbh->quote($name)
|
||||
.")) from ".$dbh->quote($table));
|
||||
.")) from `".$table.'`');
|
||||
$dynamic[0]=0 if !$dynamic[0];
|
||||
@realsize= ($fixed,$fixed,ceil($dynamic[0]));
|
||||
}
|
||||
elsif($type =~ /binary/ || $type =~ /char/)
|
||||
{@realsize=($size,$size,$size)}
|
||||
elsif($type =~ /text/ || $type =~ /blob/)
|
||||
{@realsize=(256,256,1)} # FIXME check if 5.1 is correct
|
||||
{
|
||||
@realsize=(256,256,1);
|
||||
$NoOfTables[$_]{val} += 1 foreach 0..$#releases; # blob uses table
|
||||
} # FIXME check if 5.1 is correct
|
||||
|
||||
@realsize= align(4,@realsize);
|
||||
|
||||
|
|
@ -166,7 +185,7 @@ foreach(@{$tables})
|
|||
# we can still connect to pre-5.0 mysqlds.
|
||||
my %indexes;
|
||||
{
|
||||
my $sth= $dbh->prepare("show index from "$dbh->quote($table));
|
||||
my $sth= $dbh->prepare("show index from `".$table.'`');
|
||||
$sth->execute;
|
||||
while(my $i = $sth->fetchrow_hashref)
|
||||
{
|
||||
|
|
@ -257,7 +276,51 @@ foreach(@{$tables})
|
|||
IndexMemory=>\@IndexMemory,
|
||||
|
||||
};
|
||||
|
||||
$dbDataMemory[$_]{val} += $DataMemory[$_]{val} foreach 0..$#releases;
|
||||
$dbIndexMemory[$_]{val} += $IndexMemory[$_]{val} foreach 0..$#releases;
|
||||
$NoOfAttributes[$_]{val} += @columns foreach 0..$#releases;
|
||||
$NoOfIndexes[$_]{val} += @indexes foreach 0..$#releases;
|
||||
}
|
||||
|
||||
my @NoOfTriggers;
|
||||
# for unique hash indexes
|
||||
$NoOfTriggers[$_]{val} += $NoOfIndexes[$_]{val}*3 foreach 0..$#releases;
|
||||
# for ordered index
|
||||
$NoOfTriggers[$_]{val} += $NoOfIndexes[$_]{val} foreach 0..$#releases;
|
||||
|
||||
my @ParamMemory;
|
||||
foreach (0..$#releases) {
|
||||
$ParamMemory[0]{releases}[$_]{val}= POSIX::ceil(200*$NoOfAttributes[$_]{val}/1024);
|
||||
$ParamMemory[0]{name}= 'Attributes';
|
||||
|
||||
$ParamMemory[1]{releases}[$_]{val}= 20*$NoOfTables[$_]{val};
|
||||
$ParamMemory[1]{name}= 'Tables';
|
||||
|
||||
$ParamMemory[2]{releases}[$_]{val}= 10*$NoOfIndexes[$_]{val};
|
||||
$ParamMemory[2]{name}= 'OrderedIndexes';
|
||||
|
||||
$ParamMemory[3]{releases}[$_]{val}= 15*$NoOfIndexes[$_]{val};
|
||||
$ParamMemory[3]{name}= 'UniqueHashIndexes';
|
||||
}
|
||||
|
||||
$template->param(tables => \@table_size);
|
||||
$template->param(Parameters => [{name=>'DataMemory (kb)',
|
||||
releases=>\@dbDataMemory},
|
||||
{name=>'IndexMemory (kb)',
|
||||
releases=>\@dbIndexMemory},
|
||||
{name=>'MaxNoOfTables',
|
||||
releases=>\@NoOfTables},
|
||||
{name=>'MaxNoOfAttributes',
|
||||
releases=>\@NoOfAttributes},
|
||||
{name=>'MaxNoOfOrderedIndexes',
|
||||
releases=>\@NoOfIndexes},
|
||||
{name=>'MaxNoOfUniqueHashIndexes',
|
||||
releases=>\@NoOfIndexes},
|
||||
{name=>'MaxNoOfTriggers',
|
||||
releases=>\@NoOfTriggers}
|
||||
]
|
||||
);
|
||||
$template->param(ParamMemory => \@ParamMemory);
|
||||
|
||||
print $template->output;
|
||||
|
|
|
|||
|
|
@ -13,18 +13,58 @@ td,th { border: 1px solid black }
|
|||
<h1>MySQL Cluster analysis for <TMPL_VAR NAME="db" escape="html"></h1>
|
||||
<p>This is an automated analysis of the <TMPL_VAR NAME="DSN" escape="html"> database for migration into <a href="http://www.mysql.com/">MySQL</a> Cluster. No warranty is made to the accuracy of the information.</p>
|
||||
|
||||
<p>This information should be valid for MySQL 4.1</p>
|
||||
<p>This information should be valid for MySQL 4.1 and 5.0. Since 5.1 is not a final release yet, the numbers should be used as a guide only.</p>
|
||||
|
||||
<h2>Parameter Settings</h2>
|
||||
<p><b>NOTE</b> the configuration parameters below do not take into account system tables and other requirements.</p>
|
||||
<table>
|
||||
<tr>
|
||||
<th>Parameter</th>
|
||||
<TMPL_LOOP NAME=releases>
|
||||
<th><TMPL_VAR NAME=rel></th>
|
||||
</TMPL_LOOP>
|
||||
</tr>
|
||||
<TMPL_LOOP NAME=Parameters>
|
||||
<tr>
|
||||
<td><TMPL_VAR NAME=name></td>
|
||||
<TMPL_LOOP NAME=releases>
|
||||
<td><TMPL_VAR NAME=val></td>
|
||||
</TMPL_LOOP>
|
||||
</tr>
|
||||
</TMPL_LOOP>
|
||||
</table>
|
||||
|
||||
<h2>Memory usage because of parameters</h2>
|
||||
|
||||
<p>Usage is in kilobytes. Actual usage will vary as you should set the parameters larger than those listed in the table above.</p>
|
||||
<table>
|
||||
<tr>
|
||||
<th>Parameter</th>
|
||||
<TMPL_LOOP NAME=releases>
|
||||
<th><TMPL_VAR NAME=rel></th>
|
||||
</TMPL_LOOP>
|
||||
</tr>
|
||||
<TMPL_LOOP NAME=ParamMemory>
|
||||
<tr>
|
||||
<td><TMPL_VAR NAME=name></td>
|
||||
<TMPL_LOOP NAME=releases>
|
||||
<td><TMPL_VAR NAME=val></td>
|
||||
</TMPL_LOOP>
|
||||
</tr>
|
||||
</TMPL_LOOP>
|
||||
</table>
|
||||
|
||||
<h2>Table List</h2>
|
||||
<ul>
|
||||
<TMPL_LOOP NAME="tables">
|
||||
<li><TMPL_VAR NAME="table"></li>
|
||||
<li><a href="#<TMPL_VAR NAME="table">"><TMPL_VAR NAME="table"></a></li>
|
||||
</TMPL_LOOP>
|
||||
</ul>
|
||||
|
||||
<hr/>
|
||||
|
||||
<TMPL_LOOP NAME="tables">
|
||||
<h2><TMPL_VAR NAME="table"></h2>
|
||||
<h2><a name="<TMPL_VAR NAME="table">"><TMPL_VAR NAME="table"></a></h2>
|
||||
<table>
|
||||
<tr>
|
||||
<th>Column</th>
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue