diff options
author | unknown <guilhem@mysql.com> | 2005-11-19 13:06:16 +0100 |
---|---|---|
committer | unknown <guilhem@mysql.com> | 2005-11-19 13:06:16 +0100 |
commit | 51972f1aead92b17338c87ac8a79380ae5cefe32 (patch) | |
tree | 16bce90a3f962365f164de3d30855d35c294567d /storage | |
parent | 7a976f73616cbe073a04e2089b73724eea91c1f5 (diff) | |
parent | 380690316f2b14b80376d18da189505de35568f4 (diff) | |
download | mariadb-git-51972f1aead92b17338c87ac8a79380ae5cefe32.tar.gz |
Merge gbichot@bk-internal.mysql.com:/home/bk/mysql-5.1-new
into mysql.com:/home/mysql_src/mysql-5.1-merge-of-5.0
Diffstat (limited to 'storage')
-rw-r--r-- | storage/myisam/ft_parser.c | 4 | ||||
-rw-r--r-- | storage/ndb/src/kernel/vm/SimulatedBlock.hpp | 6 | ||||
-rw-r--r-- | storage/ndb/src/ndbapi/NdbImpl.hpp | 10 | ||||
-rw-r--r-- | storage/ndb/src/ndbapi/NdbRecAttr.cpp | 4 | ||||
-rw-r--r-- | storage/ndb/tools/ndb_size.pl | 87 | ||||
-rw-r--r-- | storage/ndb/tools/ndb_size.tmpl | 46 |
6 files changed, 136 insertions, 21 deletions
diff --git a/storage/myisam/ft_parser.c b/storage/myisam/ft_parser.c index f21240bbfd9..a348b9fe38f 100644 --- a/storage/myisam/ft_parser.c +++ b/storage/myisam/ft_parser.c @@ -211,8 +211,10 @@ byte ft_simple_get_word(CHARSET_INFO *cs, byte **start, const byte *end, for (word->pos=doc; doc<end; length++, mbl=my_mbcharlen(cs, *(uchar *)doc), doc+=(mbl ? mbl : 1)) if (true_word_char(cs,*doc)) mwc= 0; - else if (!misc_word_char(*doc) || mwc++) + else if (!misc_word_char(*doc) || mwc) break; + else + mwc++; word->len= (uint)(doc-word->pos) - mwc; diff --git a/storage/ndb/src/kernel/vm/SimulatedBlock.hpp b/storage/ndb/src/kernel/vm/SimulatedBlock.hpp index bd4af5fa1ee..3bb134a92cd 100644 --- a/storage/ndb/src/kernel/vm/SimulatedBlock.hpp +++ b/storage/ndb/src/kernel/vm/SimulatedBlock.hpp @@ -402,8 +402,12 @@ protected: * @return length */ Uint32 xfrm_key(Uint32 tab, const Uint32* src, - Uint32 *dst, Uint32 dstLen, + Uint32 *dst, Uint32 dstSize, Uint32 keyPartLen[MAX_ATTRIBUTES_IN_INDEX]) const; + + Uint32 xfrm_attr(Uint32 attrDesc, CHARSET_INFO* cs, + const Uint32* src, Uint32 & srcPos, + Uint32* dst, Uint32 & dstPos, Uint32 dstSize) const; /** * diff --git a/storage/ndb/src/ndbapi/NdbImpl.hpp b/storage/ndb/src/ndbapi/NdbImpl.hpp index 30e0d28a765..b24d10da9b2 100644 --- a/storage/ndb/src/ndbapi/NdbImpl.hpp +++ b/storage/ndb/src/ndbapi/NdbImpl.hpp @@ -95,11 +95,9 @@ public: /** * NOTE free lists must be _after_ theNdbObjectIdMap take * assure that destructors are run in correct order + * NOTE these has to be in this specific order to make destructor run in + * correct order */ - Ndb_free_list_t<NdbTransaction> theConIdleList; - Ndb_free_list_t<NdbOperation> theOpIdleList; - Ndb_free_list_t<NdbIndexScanOperation> theScanOpIdleList; - Ndb_free_list_t<NdbIndexOperation> theIndexOpIdleList; Ndb_free_list_t<NdbRecAttr> theRecAttrIdleList; Ndb_free_list_t<NdbApiSignal> theSignalIdleList; Ndb_free_list_t<NdbLabel> theLabelList; @@ -108,6 +106,10 @@ public: Ndb_free_list_t<NdbCall> theCallList; Ndb_free_list_t<NdbBlob> theNdbBlobIdleList; Ndb_free_list_t<NdbReceiver> theScanList; + Ndb_free_list_t<NdbIndexScanOperation> theScanOpIdleList; + Ndb_free_list_t<NdbOperation> theOpIdleList; + Ndb_free_list_t<NdbIndexOperation> theIndexOpIdleList; + Ndb_free_list_t<NdbTransaction> theConIdleList; }; #ifdef VM_TRACE diff --git a/storage/ndb/src/ndbapi/NdbRecAttr.cpp b/storage/ndb/src/ndbapi/NdbRecAttr.cpp index 796be2b14e9..a03dd6c536f 100644 --- a/storage/ndb/src/ndbapi/NdbRecAttr.cpp +++ b/storage/ndb/src/ndbapi/NdbRecAttr.cpp @@ -24,6 +24,7 @@ NdbRecAttr::NdbRecAttr(Ndb*) { + theStorageX = 0; init(); } @@ -50,6 +51,9 @@ NdbRecAttr::setup(const NdbColumnImpl* anAttrInfo, char* aValue) theAttrId = anAttrInfo->m_attrId; m_size_in_bytes = tAttrByteSize; theValue = aValue; + + if (theStorageX) + delete[] theStorageX; // check alignment to signal data // a future version could check alignment per data type as well diff --git a/storage/ndb/tools/ndb_size.pl b/storage/ndb/tools/ndb_size.pl index 64a20423636..ece0901e0b2 100644 --- a/storage/ndb/tools/ndb_size.pl +++ b/storage/ndb/tools/ndb_size.pl @@ -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; diff --git a/storage/ndb/tools/ndb_size.tmpl b/storage/ndb/tools/ndb_size.tmpl index d83d5d2c6af..dc02b5a5970 100644 --- a/storage/ndb/tools/ndb_size.tmpl +++ b/storage/ndb/tools/ndb_size.tmpl @@ -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> |