mirror of
https://github.com/MariaDB/server.git
synced 2025-07-30 16:24:05 +03:00
Fixes for FULLTEXT and TIME type
Docs/manual.texi: Update of Linux notes and mysql_install_db include/my_tree.h: new tree function myisam/ft_parser.c: Fix free() bug myisam/ft_search.c: Fix free() bug myisam/ft_update.c: Fix free() bug scripts/safe_mysqld.sh: Check if we run as root sql-bench/Results-linux/ATIS-mysql-Linux_2.2.13_SMP_alpha: ***MISSING WEAVE*** sql-bench/Results-linux/ATIS-mysql_fast-Linux_2.2.13_SMP_alpha: ***MISSING WEAVE*** sql-bench/Results-linux/RUN-mysql-Linux_2.2.13_SMP_alpha: ***MISSING WEAVE*** sql-bench/Results-linux/RUN-mysql_fast-Linux_2.2.13_SMP_alpha: ***MISSING WEAVE*** sql-bench/Results-linux/alter-table-mysql-Linux_2.2.13_SMP_alpha: ***MISSING WEAVE*** sql-bench/Results-linux/alter-table-mysql_fast-Linux_2.2.13_SMP_alpha: ***MISSING WEAVE*** sql-bench/Results-linux/big-tables-mysql-Linux_2.2.13_SMP_alpha: ***MISSING WEAVE*** sql-bench/Results-linux/big-tables-mysql_fast-Linux_2.2.13_SMP_alpha: ***MISSING WEAVE*** sql-bench/Results-linux/connect-mysql-Linux_2.2.13_SMP_alpha: ***MISSING WEAVE*** sql-bench/Results-linux/connect-mysql_fast-Linux_2.2.13_SMP_alpha: ***MISSING WEAVE*** sql-bench/Results-linux/create-mysql-Linux_2.2.13_SMP_alpha: ***MISSING WEAVE*** sql-bench/Results-linux/create-mysql_fast-Linux_2.2.13_SMP_alpha: ***MISSING WEAVE*** sql-bench/Results-linux/insert-mysql-Linux_2.2.13_SMP_alpha: ***MISSING WEAVE*** sql-bench/Results-linux/insert-mysql_fast-Linux_2.2.13_SMP_alpha: ***MISSING WEAVE*** sql-bench/Results-linux/select-mysql-Linux_2.2.13_SMP_alpha: ***MISSING WEAVE*** sql-bench/Results-linux/select-mysql_fast-Linux_2.2.13_SMP_alpha: ***MISSING WEAVE*** sql-bench/Results-linux/wisconsin-mysql-Linux_2.2.13_SMP_alpha: ***MISSING WEAVE*** sql-bench/Results-linux/wisconsin-mysql_fast-Linux_2.2.13_SMP_alpha: ***MISSING WEAVE*** sql-bench/server-cfg.sh: Added use of OPTIMIZE TABLE sql-bench/test-ATIS.sh: Added use of OPTIMIZE TABLE sql-bench/test-insert.sh: Added use of OPTIMIZE TABLE sql-bench/test-select.sh: Added use of OPTIMIZE TABLE sql-bench/test-wisconsin.sh: Added use of OPTIMIZE TABLE sql/field.cc: Fix TIME type sql/item_func.h: Fixed Free bug
This commit is contained in:
@ -3368,7 +3368,7 @@ encounter per year, but we are always very flexible towards our customers!
|
|||||||
* Source install system issues:: System-specific issues
|
* Source install system issues:: System-specific issues
|
||||||
* Windows:: Windows notes
|
* Windows:: Windows notes
|
||||||
* OS/2:: OS/2 notes
|
* OS/2:: OS/2 notes
|
||||||
* MySQL binaries::
|
* MySQL binaries:: MySQL binaries
|
||||||
* Post-installation:: Post-installation setup and testing
|
* Post-installation:: Post-installation setup and testing
|
||||||
* Upgrade:: Is there anything special to do when upgrading/downgrading @strong{MySQL}?
|
* Upgrade:: Is there anything special to do when upgrading/downgrading @strong{MySQL}?
|
||||||
@end menu
|
@end menu
|
||||||
@ -6020,9 +6020,14 @@ patch could do - use at your own risk. We have also been told by the
|
|||||||
Linux kernel developers that this problem is fixed in 2.4, although we
|
Linux kernel developers that this problem is fixed in 2.4, although we
|
||||||
have not yet done any testing.
|
have not yet done any testing.
|
||||||
|
|
||||||
|
We have also tested @strong{MySQL} on Linux 2.4 on a 2 CPU machine and
|
||||||
|
@strong{MySQL} scales MUCH better on this! If your plan to set up a
|
||||||
|
dedicated Linux SMP machine to run @code{MySQL} under heavy, we
|
||||||
|
recommend that you give 2.4 a try!
|
||||||
|
|
||||||
The current implementation of mutex in Linuxthreads is also very bad for
|
The current implementation of mutex in Linuxthreads is also very bad for
|
||||||
programs with many threads that only holds the mutex for a short time.
|
programs with many threads that only holds the mutex for a short time.
|
||||||
We have made a patch availlable for glibc 2.1,
|
We have made a patch available for glibc 2.1,
|
||||||
@uref{http://www.mysql.com/Downloads/Linux/linuxthreads-2.1-patch,linuxthreads-2.1-patch}
|
@uref{http://www.mysql.com/Downloads/Linux/linuxthreads-2.1-patch,linuxthreads-2.1-patch}
|
||||||
and for glibc 2.2,
|
and for glibc 2.2,
|
||||||
@uref{http://www.mysql.com/Downloads/Linux/linuxthreads-2.2-patch,linuxthreads-2.2-patch}.
|
@uref{http://www.mysql.com/Downloads/Linux/linuxthreads-2.2-patch,linuxthreads-2.2-patch}.
|
||||||
@ -6376,9 +6381,6 @@ Using @code{gcc-2.9-final}:
|
|||||||
CFLAGS="-O2" CXX=gcc CXXFLAGS="-O2 -felide-constructors -fno-exceptions -fno-rtti" ./configure --prefix=/usr/local/mysql --enable-assembler --with-mysqld-ldflags=-all-static --disable-shared --with-extra-charsets=complex
|
CFLAGS="-O2" CXX=gcc CXXFLAGS="-O2 -felide-constructors -fno-exceptions -fno-rtti" ./configure --prefix=/usr/local/mysql --enable-assembler --with-mysqld-ldflags=-all-static --disable-shared --with-extra-charsets=complex
|
||||||
@end example
|
@end example
|
||||||
|
|
||||||
After this you have to edit @file{config.h} and remove the
|
|
||||||
@code{HAVE_ATOMIC_ADD} line.
|
|
||||||
|
|
||||||
After @code{make} you will get an error that @code{sql/opt_range.cc}
|
After @code{make} you will get an error that @code{sql/opt_range.cc}
|
||||||
will not compile (internal compiler error). To fix this, go to the sql
|
will not compile (internal compiler error). To fix this, go to the sql
|
||||||
directory and type @code{make} again. Copy the compile line, but change
|
directory and type @code{make} again. Copy the compile line, but change
|
||||||
@ -7540,6 +7542,7 @@ able to mix @code{INSERT} and @code{SELECT}. Currently we use mutexes
|
|||||||
to emulate @code{pread()}/@code{pwrite()}. We will in the long run
|
to emulate @code{pread()}/@code{pwrite()}. We will in the long run
|
||||||
replace the file level interface with a virtual interface so that we can
|
replace the file level interface with a virtual interface so that we can
|
||||||
use the @code{readfile()}/@code{writefile()} interface on NT to get more speed.
|
use the @code{readfile()}/@code{writefile()} interface on NT to get more speed.
|
||||||
|
|
||||||
@item Blocking read
|
@item Blocking read
|
||||||
@strong{MySQL} uses a blocking read for each connection.
|
@strong{MySQL} uses a blocking read for each connection.
|
||||||
This means that:
|
This means that:
|
||||||
@ -7561,7 +7564,8 @@ If a connection ``hangs,'' it's impossible to break it without killing
|
|||||||
connections.
|
connections.
|
||||||
@end itemize
|
@end itemize
|
||||||
|
|
||||||
We plan to fix this in the near future.
|
We plan to fix this when our windows developers have figured out a nice
|
||||||
|
workaround for this :)
|
||||||
|
|
||||||
@item UDF functions
|
@item UDF functions
|
||||||
For the moment, @strong{MySQL}-Windows does not support user definable
|
For the moment, @strong{MySQL}-Windows does not support user definable
|
||||||
@ -8072,6 +8076,19 @@ The expected results are shown in the @file{./tests/auto_increment.res} file.
|
|||||||
@node mysql_install_db, Starting server, Post-installation, Post-installation
|
@node mysql_install_db, Starting server, Post-installation, Post-installation
|
||||||
@subsection Problems running @code{mysql_install_db}
|
@subsection Problems running @code{mysql_install_db}
|
||||||
|
|
||||||
|
The purpose of the @code{mysql_install_db} script is to generate new
|
||||||
|
@strong{MySQL} privilege tables. It will not affect any other data!
|
||||||
|
It will also not do anything if you have already have MySQL privilege
|
||||||
|
tables installed!
|
||||||
|
|
||||||
|
If you want to recreate your privilege tables, you should take down
|
||||||
|
the mysqld server, if its running, and then do something like:
|
||||||
|
|
||||||
|
@example
|
||||||
|
mv mysql-data-directory/mysql mysql-data-directory/mysql-old
|
||||||
|
mysql_install_db
|
||||||
|
@end example
|
||||||
|
|
||||||
This section lists problems you might encounter when you run
|
This section lists problems you might encounter when you run
|
||||||
@code{mysql_install_db}:
|
@code{mysql_install_db}:
|
||||||
|
|
||||||
@ -8153,7 +8170,6 @@ shell> export TMPDIR MYSQL_UNIX_PORT
|
|||||||
@file{some_tmp_dir} should be the path to some directory for which you
|
@file{some_tmp_dir} should be the path to some directory for which you
|
||||||
have write permission. @xref{Environment variables}.
|
have write permission. @xref{Environment variables}.
|
||||||
|
|
||||||
|
|
||||||
After this you should be able to run @code{mysql_install_db} and start
|
After this you should be able to run @code{mysql_install_db} and start
|
||||||
the server with these commands:
|
the server with these commands:
|
||||||
|
|
||||||
@ -11237,7 +11253,7 @@ shell> mysqladmin -u root password new_password
|
|||||||
Only user with write/update access to the mysql database can change the
|
Only user with write/update access to the mysql database can change the
|
||||||
password for others user. All normal users (not anonymous ones) can only
|
password for others user. All normal users (not anonymous ones) can only
|
||||||
change his own password with either of the above commands or with
|
change his own password with either of the above commands or with
|
||||||
@code{SET PASSWORD PASSWORD('new password')}
|
@code{SET PASSWORD=PASSWORD('new password')}
|
||||||
|
|
||||||
Note that if you update the password in the @code{user} table directly using
|
Note that if you update the password in the @code{user} table directly using
|
||||||
the first method, you must tell the server to reread the grant tables (with
|
the first method, you must tell the server to reread the grant tables (with
|
||||||
|
@ -61,6 +61,7 @@ void init_tree(TREE *tree,uint default_alloc_size, int element_size,
|
|||||||
qsort_cmp compare, my_bool with_delete,
|
qsort_cmp compare, my_bool with_delete,
|
||||||
void (*free_element)(void*));
|
void (*free_element)(void*));
|
||||||
void delete_tree(TREE*);
|
void delete_tree(TREE*);
|
||||||
|
#define is_tree_inited(tree) ((tree)->root != 0)
|
||||||
|
|
||||||
/* Functions on leafs */
|
/* Functions on leafs */
|
||||||
TREE_ELEMENT *tree_insert(TREE *tree,void *key,uint key_size);
|
TREE_ELEMENT *tree_insert(TREE *tree,void *key,uint key_size);
|
||||||
|
@ -86,8 +86,8 @@ FT_WORD * ft_linearize(MI_INFO *info, uint keynr, byte *keybuf, TREE *wtree)
|
|||||||
tree_walk(wtree,(tree_walk_action)&walk_and_copy,&docstat,left_root_right);
|
tree_walk(wtree,(tree_walk_action)&walk_and_copy,&docstat,left_root_right);
|
||||||
}
|
}
|
||||||
delete_tree(wtree);
|
delete_tree(wtree);
|
||||||
free(wtree);
|
my_free((char*) wtree,MYF(0));
|
||||||
if(wlist==NULL)
|
if (wlist==NULL)
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
docstat.list->pos=NULL;
|
docstat.list->pos=NULL;
|
||||||
@ -127,24 +127,24 @@ TREE * ft_parse(TREE *wtree, byte *doc, int doclen)
|
|||||||
byte *end=doc+doclen;
|
byte *end=doc+doclen;
|
||||||
FT_WORD w;
|
FT_WORD w;
|
||||||
|
|
||||||
if(!wtree)
|
if (!wtree)
|
||||||
{
|
{
|
||||||
if(!(wtree=(TREE *)my_malloc(sizeof(TREE),MYF(0)))) return NULL;
|
if (!(wtree=(TREE *)my_malloc(sizeof(TREE),MYF(0)))) return NULL;
|
||||||
init_tree(wtree,0,sizeof(FT_WORD),(qsort_cmp)&FT_WORD_cmp,0,NULL);
|
init_tree(wtree,0,sizeof(FT_WORD),(qsort_cmp)&FT_WORD_cmp,0,NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
w.weight=0;
|
w.weight=0;
|
||||||
while(doc<end)
|
while (doc<end)
|
||||||
{
|
{
|
||||||
for(;doc<end;doc++)
|
for (;doc<end;doc++)
|
||||||
if(word_char(*doc)) break;
|
if (word_char(*doc)) break;
|
||||||
for(w.pos=doc; doc<end; doc++)
|
for (w.pos=doc; doc<end; doc++)
|
||||||
if(!word_char(*doc)) break;
|
if (!word_char(*doc)) break;
|
||||||
if((w.len= (uint) (doc-w.pos)) < MIN_WORD_LEN) continue;
|
if ((w.len= (uint) (doc-w.pos)) < MIN_WORD_LEN) continue;
|
||||||
if(!tree_insert(wtree, &w, 0))
|
if (!tree_insert(wtree, &w, 0))
|
||||||
{
|
{
|
||||||
delete_tree(wtree);
|
delete_tree(wtree);
|
||||||
free(wtree);
|
my_free((char*) wtree,MYF(0));
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -176,17 +176,18 @@ FT_DOCLIST * ft_init_search(void *info, uint keynr, byte *key,
|
|||||||
|
|
||||||
saved_lastpos=aio.info->lastpos;
|
saved_lastpos=aio.info->lastpos;
|
||||||
|
|
||||||
if(!(wtree=ft_parse(NULL,key,key_len))) return NULL;
|
if (!(wtree=ft_parse(NULL,key,key_len))) return NULL;
|
||||||
|
|
||||||
init_tree(&aio.dtree,0,sizeof(FT_SUPERDOC),(qsort_cmp)&FT_SUPERDOC_cmp,0,
|
init_tree(&aio.dtree,0,sizeof(FT_SUPERDOC),(qsort_cmp)&FT_SUPERDOC_cmp,0,
|
||||||
NULL);
|
NULL);
|
||||||
|
|
||||||
if(tree_walk(wtree, (tree_walk_action)&walk_and_match, &aio,
|
if (tree_walk(wtree, (tree_walk_action)&walk_and_match, &aio,
|
||||||
left_root_right))
|
left_root_right))
|
||||||
goto err;
|
goto err;
|
||||||
|
|
||||||
dlist=(FT_DOCLIST *)my_malloc(sizeof(FT_DOCLIST)+sizeof(FT_DOC)*(aio.dtree.elements_in_tree-1),MYF(0));
|
dlist=(FT_DOCLIST *) my_malloc(sizeof(FT_DOCLIST)+sizeof(FT_DOC)*
|
||||||
if(!dlist)
|
(aio.dtree.elements_in_tree-1),MYF(0));
|
||||||
|
if (!dlist)
|
||||||
goto err;
|
goto err;
|
||||||
|
|
||||||
dlist->ndocs=aio.dtree.elements_in_tree;
|
dlist->ndocs=aio.dtree.elements_in_tree;
|
||||||
@ -194,9 +195,10 @@ FT_DOCLIST * ft_init_search(void *info, uint keynr, byte *key,
|
|||||||
dlist->info=aio.info;
|
dlist->info=aio.info;
|
||||||
dptr=dlist->doc;
|
dptr=dlist->doc;
|
||||||
|
|
||||||
tree_walk(&aio.dtree, (tree_walk_action)&walk_and_copy, &dptr, left_root_right);
|
tree_walk(&aio.dtree, (tree_walk_action)&walk_and_copy, &dptr,
|
||||||
|
left_root_right);
|
||||||
|
|
||||||
if(presort)
|
if (presort)
|
||||||
{
|
{
|
||||||
qsort(dlist->doc, dlist->ndocs, sizeof(FT_DOC), (qsort_cmp)&FT_DOC_cmp);
|
qsort(dlist->doc, dlist->ndocs, sizeof(FT_DOC), (qsort_cmp)&FT_DOC_cmp);
|
||||||
}
|
}
|
||||||
@ -205,7 +207,7 @@ err:
|
|||||||
aio.info->lastpos=saved_lastpos;
|
aio.info->lastpos=saved_lastpos;
|
||||||
delete_tree(&aio.dtree);
|
delete_tree(&aio.dtree);
|
||||||
delete_tree(wtree);
|
delete_tree(wtree);
|
||||||
free(wtree);
|
my_free((char*) wtree,MYF(0));
|
||||||
return dlist;
|
return dlist;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -29,7 +29,8 @@
|
|||||||
|
|
||||||
|
|
||||||
/* parses a document i.e. calls _mi_ft_parse for every keyseg */
|
/* parses a document i.e. calls _mi_ft_parse for every keyseg */
|
||||||
static FT_WORD * _mi_ft_parserecord(MI_INFO *info, uint keynr, byte *keybuf, const byte *record)
|
static FT_WORD * _mi_ft_parserecord(MI_INFO *info, uint keynr, byte *keybuf,
|
||||||
|
const byte *record)
|
||||||
{
|
{
|
||||||
TREE *parsed=NULL;
|
TREE *parsed=NULL;
|
||||||
MI_KEYSEG *keyseg;
|
MI_KEYSEG *keyseg;
|
||||||
@ -62,7 +63,7 @@ static FT_WORD * _mi_ft_parserecord(MI_INFO *info, uint keynr, byte *keybuf, con
|
|||||||
len=keyseg->length;
|
len=keyseg->length;
|
||||||
|
|
||||||
parsed=ft_parse(parsed, pos, len);
|
parsed=ft_parse(parsed, pos, len);
|
||||||
if(parsed==NULL) return NULL;
|
if (parsed==NULL) return NULL;
|
||||||
}
|
}
|
||||||
return ft_linearize(info, keynr, keybuf, parsed);
|
return ft_linearize(info, keynr, keybuf, parsed);
|
||||||
}
|
}
|
||||||
@ -150,23 +151,36 @@ int _mi_ft_cmp(MI_INFO *info, uint keynr, const byte *rec1, const byte *rec2)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* adds a document to the collection */
|
/* adds a document to the collection */
|
||||||
int _mi_ft_add(MI_INFO *info, uint keynr, byte *keybuf, const byte *record, my_off_t pos)
|
int _mi_ft_add(MI_INFO *info, uint keynr, byte *keybuf, const byte *record,
|
||||||
|
my_off_t pos)
|
||||||
{
|
{
|
||||||
|
int error= -1;
|
||||||
FT_WORD *wlist;
|
FT_WORD *wlist;
|
||||||
|
|
||||||
if(!(wlist=_mi_ft_parserecord(info, keynr, keybuf, record))) return -1;
|
if ((wlist=_mi_ft_parserecord(info, keynr, keybuf, record)))
|
||||||
return _mi_ft_store(info,keynr,keybuf,wlist,pos);
|
{
|
||||||
|
error=_mi_ft_store(info,keynr,keybuf,wlist,pos);
|
||||||
|
my_free((char*) wlist,MYF(0));
|
||||||
|
}
|
||||||
|
return error;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* removes a document from the collection */
|
/* removes a document from the collection */
|
||||||
int _mi_ft_del(MI_INFO *info, uint keynr, byte *keybuf, const byte *record, my_off_t pos)
|
int _mi_ft_del(MI_INFO *info, uint keynr, byte *keybuf, const byte *record,
|
||||||
|
my_off_t pos)
|
||||||
{
|
{
|
||||||
|
int error= -1;
|
||||||
FT_WORD *wlist;
|
FT_WORD *wlist;
|
||||||
if(!(wlist=_mi_ft_parserecord(info, keynr, keybuf, record))) return -1;
|
if ((wlist=_mi_ft_parserecord(info, keynr, keybuf, record)))
|
||||||
return _mi_ft_erase(info,keynr,keybuf,wlist,pos);
|
{
|
||||||
|
error=_mi_ft_erase(info,keynr,keybuf,wlist,pos);
|
||||||
|
my_free((char*) wlist,MYF(0));
|
||||||
|
}
|
||||||
|
return error;
|
||||||
}
|
}
|
||||||
|
|
||||||
uint _ft_make_key(MI_INFO *info, uint keynr, byte *keybuf, FT_WORD *wptr, my_off_t filepos)
|
uint _ft_make_key(MI_INFO *info, uint keynr, byte *keybuf, FT_WORD *wptr,
|
||||||
|
my_off_t filepos)
|
||||||
{
|
{
|
||||||
byte buf[HA_FT_MAXLEN+16];
|
byte buf[HA_FT_MAXLEN+16];
|
||||||
|
|
||||||
|
@ -88,16 +88,24 @@ then
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
|
|
||||||
NOHUP_NICENESS=`nohup nice`
|
NOHUP_NICENESS="nohup"
|
||||||
if test $? -ne 0 || test x"$NOHUP_NICENESS" = x0 || test ! nice --1 echo foo > /dev/null 2>&1; then
|
if test -w /
|
||||||
NOHUP_NICENESS="nohup"
|
then
|
||||||
else
|
NOHUP_NICENESS=`nohup nice`
|
||||||
NOHUP_NICENESS="nice --$NOHUP_NICENESS nohup"
|
if test $? -ne 0 || test x"$NOHUP_NICENESS" = x0 || test ! nice --1 echo foo > /dev/null 2>&1; then
|
||||||
|
NOHUP_NICENESS="nohup"
|
||||||
|
else
|
||||||
|
NOHUP_NICENESS="nice --$NOHUP_NICENESS nohup"
|
||||||
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
export MYSQL_UNIX_PORT
|
export MYSQL_UNIX_PORT
|
||||||
export MYSQL_TCP_PORT
|
export MYSQL_TCP_PORT
|
||||||
touch $err_log; chown $user $err_log
|
if test -w /
|
||||||
|
then
|
||||||
|
# If we are root, change the err log to the right user.
|
||||||
|
touch $err_log; chown $user $err_log
|
||||||
|
fi
|
||||||
|
|
||||||
#
|
#
|
||||||
# If there exists an old pid file, check if the daemon is already running
|
# If there exists an old pid file, check if the daemon is already running
|
||||||
|
39
sql-bench/Comments/mysql.benchmark
Normal file
39
sql-bench/Comments/mysql.benchmark
Normal file
@ -0,0 +1,39 @@
|
|||||||
|
# This file describes how to run MySQL benchmarks with MySQL
|
||||||
|
#
|
||||||
|
|
||||||
|
# The test was run on a Intel Xeon 2x 550 Mzh machine with 1G memory,
|
||||||
|
# 9G hard disk. The OS is Suse 6.4, with Linux 2.2.14 compiled with SMP
|
||||||
|
# support
|
||||||
|
# Both the perl client and the database server is run
|
||||||
|
# on the same machine. No other cpu intensive process was used during
|
||||||
|
# the benchmark.
|
||||||
|
|
||||||
|
#
|
||||||
|
#
|
||||||
|
# First, install MySQL from RPM or compile it according to the
|
||||||
|
# recommendations in the MySQL manual
|
||||||
|
#
|
||||||
|
|
||||||
|
# Start MySQL
|
||||||
|
|
||||||
|
bin/safe_mysqld -O key_buffer=16M &
|
||||||
|
|
||||||
|
#
|
||||||
|
# Now we run the test that can be found in the sql-bench directory in the
|
||||||
|
# MySQL 3.23 source distribution with and without --fast
|
||||||
|
#
|
||||||
|
# Note that if you want to make a results that is comparead to some database,
|
||||||
|
# You should add "--cmp=databasename" as an extra option to the test
|
||||||
|
#
|
||||||
|
$CMP=--cmp=pg
|
||||||
|
|
||||||
|
run-all-tests --comment="Intel Xeon, 2x550 Mhz, 1G, key_buffer=16M" $CMP
|
||||||
|
run-all-tests --comment="Intel Xeon, 2x550 Mhz, 1G, key_buffer=16M" --fast $CMP
|
||||||
|
|
||||||
|
# If you want to store the results in a output/RUN-xxx file, you should
|
||||||
|
# repeate the benchmark with the extra option --log --use-old-result
|
||||||
|
# This will create a the RUN file based of the previous results
|
||||||
|
#
|
||||||
|
|
||||||
|
run-all-tests --comment="Intel Xeon, 2x550 Mhz, 1G, key_buffer=16M" --log --use-old-result $CMP
|
||||||
|
run-all-tests --comment="Intel Xeon, 2x550 Mhz, 1G, key_buffer=16M" --fast --log --use-old-result $CMP
|
@ -116,6 +116,7 @@ sub new
|
|||||||
$self->{'blob'} = "blob";
|
$self->{'blob'} = "blob";
|
||||||
$self->{'text'} = "text";
|
$self->{'text'} = "text";
|
||||||
$self->{'double_quotes'} = 1; # Can handle: 'Walker''s'
|
$self->{'double_quotes'} = 1; # Can handle: 'Walker''s'
|
||||||
|
$self->{'vacuum'} = 1; # When using with --fast
|
||||||
|
|
||||||
$limits{'max_conditions'} = 9999; # (Actually not a limit)
|
$limits{'max_conditions'} = 9999; # (Actually not a limit)
|
||||||
$limits{'max_columns'} = 2000; # Max number of columns in table
|
$limits{'max_columns'} = 2000; # Max number of columns in table
|
||||||
@ -308,6 +309,26 @@ sub reconnect_on_errors
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#
|
||||||
|
# Optimize tables for better performance
|
||||||
|
#
|
||||||
|
|
||||||
|
sub vacuum
|
||||||
|
{
|
||||||
|
my ($self,$full_vacuum,$dbh_ref,@tables)=@_;
|
||||||
|
my ($loop_time,$end_time,$dbh);
|
||||||
|
if ($#tables >= 0)
|
||||||
|
{
|
||||||
|
$dbh=$$dbh_ref;
|
||||||
|
$loop_time=new Benchmark;
|
||||||
|
$dbh->do("OPTIMIZE TABLE " . join(',',@tables)) || die "Got error: $DBI::errstr when executing 'OPTIMIZE TABLE'\n";
|
||||||
|
$end_time=new Benchmark;
|
||||||
|
print "Time for book-keeping (1): " .
|
||||||
|
Benchmark::timestr(Benchmark::timediff($end_time, $loop_time),"all") . "\n\n";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
#############################################################################
|
#############################################################################
|
||||||
# Definitions for mSQL
|
# Definitions for mSQL
|
||||||
#############################################################################
|
#############################################################################
|
||||||
|
@ -71,10 +71,10 @@ if (!$opt_skip_create)
|
|||||||
print "Time for create_table (" . ($#tables+1) ."): " .
|
print "Time for create_table (" . ($#tables+1) ."): " .
|
||||||
timestr(timediff($end_time, $loop_time),"all") . "\n\n";
|
timestr(timediff($end_time, $loop_time),"all") . "\n\n";
|
||||||
|
|
||||||
if ($opt_fast && defined($server->{vacuum}))
|
if ($opt_fast && defined($server->{vacuum}))
|
||||||
{
|
{
|
||||||
$server->vacuum(0,\$dbh);
|
$server->vacuum(0,\$dbh);
|
||||||
}
|
}
|
||||||
|
|
||||||
####
|
####
|
||||||
#### Insert data
|
#### Insert data
|
||||||
@ -130,22 +130,26 @@ if ($opt_fast && defined($server->{vacuum}))
|
|||||||
}
|
}
|
||||||
close(DATA);
|
close(DATA);
|
||||||
}
|
}
|
||||||
|
if ($opt_lock_tables)
|
||||||
|
{
|
||||||
|
$dbh->do("UNLOCK TABLES");
|
||||||
|
}
|
||||||
$end_time=new Benchmark;
|
$end_time=new Benchmark;
|
||||||
print "Time to insert ($row_count): " .
|
print "Time to insert ($row_count): " .
|
||||||
timestr(timediff($end_time, $loop_time),"all") . "\n\n";
|
timestr(timediff($end_time, $loop_time),"all") . "\n\n";
|
||||||
}
|
}
|
||||||
elsif ($opt_lock_tables)
|
|
||||||
|
if ($opt_fast && defined($server->{vacuum}))
|
||||||
|
{
|
||||||
|
$server->vacuum(0,\$dbh,@table_names);
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($opt_lock_tables)
|
||||||
{
|
{
|
||||||
@tmp=@table_names; push(@tmp,@extra_names);
|
@tmp=@table_names; push(@tmp,@extra_names);
|
||||||
$sth = $dbh->do("LOCK TABLES " . join(" READ,", @tmp) . " READ") ||
|
$sth = $dbh->do("LOCK TABLES " . join(" READ,", @tmp) . " READ") ||
|
||||||
die $DBI::errstr;
|
die $DBI::errstr;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($opt_fast && defined($server->{vacuum}))
|
|
||||||
{
|
|
||||||
$server->vacuum(0,\$dbh);
|
|
||||||
}
|
|
||||||
|
|
||||||
#
|
#
|
||||||
# Now the fun begins. Let's do some simple queries on the result
|
# Now the fun begins. Let's do some simple queries on the result
|
||||||
#
|
#
|
||||||
|
@ -206,9 +206,17 @@ $end_time=new Benchmark;
|
|||||||
print "Time for insert (" . ($total_rows) . "): " .
|
print "Time for insert (" . ($total_rows) . "): " .
|
||||||
timestr(timediff($end_time, $loop_time),"all") . "\n\n";
|
timestr(timediff($end_time, $loop_time),"all") . "\n\n";
|
||||||
|
|
||||||
|
if ($opt_lock_tables)
|
||||||
|
{
|
||||||
|
$sth = $dbh->do("UNLOCK TABLES") || die $DBI::errstr;
|
||||||
|
}
|
||||||
if ($opt_fast && defined($server->{vacuum}))
|
if ($opt_fast && defined($server->{vacuum}))
|
||||||
{
|
{
|
||||||
$server->vacuum(1,\$dbh);
|
$server->vacuum(1,\$dbh,"bench1");
|
||||||
|
}
|
||||||
|
if ($opt_lock_tables)
|
||||||
|
{
|
||||||
|
$sth = $dbh->do("LOCK TABLES bench1 WRITE") || die $DBI::errstr;
|
||||||
}
|
}
|
||||||
|
|
||||||
####
|
####
|
||||||
@ -235,10 +243,10 @@ $end_time=new Benchmark;
|
|||||||
print "Time for insert_duplicates (" . ($total_rows) . "): " .
|
print "Time for insert_duplicates (" . ($total_rows) . "): " .
|
||||||
timestr(timediff($end_time, $loop_time),"all") . "\n\n";
|
timestr(timediff($end_time, $loop_time),"all") . "\n\n";
|
||||||
|
|
||||||
if ($opt_fast && defined($server->{vacuum}))
|
#if ($opt_fast && defined($server->{vacuum}))
|
||||||
{
|
#{
|
||||||
$server->vacuum(1,\$dbh);
|
# $server->vacuum(1,\$dbh);
|
||||||
}
|
#}
|
||||||
|
|
||||||
####
|
####
|
||||||
#### Do some selects on the table
|
#### Do some selects on the table
|
||||||
@ -605,9 +613,17 @@ if ($limits->{'functions'})
|
|||||||
print "Time for update_of_key ($range_loop_count): " .
|
print "Time for update_of_key ($range_loop_count): " .
|
||||||
timestr(timediff($end_time, $loop_time),"all") . "\n";
|
timestr(timediff($end_time, $loop_time),"all") . "\n";
|
||||||
|
|
||||||
|
if ($opt_lock_tables)
|
||||||
|
{
|
||||||
|
do_query($dbh,"UNLOCK TABLES");
|
||||||
|
}
|
||||||
if ($opt_fast && defined($server->{vacuum}))
|
if ($opt_fast && defined($server->{vacuum}))
|
||||||
{
|
{
|
||||||
$server->vacuum(1,\$dbh);
|
$server->vacuum(1,\$dbh,"bench1");
|
||||||
|
}
|
||||||
|
if ($opt_lock_tables)
|
||||||
|
{
|
||||||
|
$sth = $dbh->do("LOCK TABLES bench1 WRITE") || die $DBI::errstr;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($server->small_rollback_segment())
|
if ($server->small_rollback_segment())
|
||||||
@ -735,7 +751,15 @@ else
|
|||||||
|
|
||||||
if ($opt_fast && defined($server->{vacuum}))
|
if ($opt_fast && defined($server->{vacuum}))
|
||||||
{
|
{
|
||||||
$server->vacuum(1,\$dbh);
|
if ($opt_lock_tables)
|
||||||
|
{
|
||||||
|
do_query($dbh,"UNLOCK TABLES");
|
||||||
|
}
|
||||||
|
$server->vacuum(1,\$dbh,"bench1");
|
||||||
|
if ($opt_lock_tables)
|
||||||
|
{
|
||||||
|
$sth = $dbh->do("LOCK TABLES bench1 WRITE") || die $DBI::errstr;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#
|
#
|
||||||
@ -902,7 +926,7 @@ if (!$opt_skip_delete)
|
|||||||
|
|
||||||
if ($opt_lock_tables)
|
if ($opt_lock_tables)
|
||||||
{
|
{
|
||||||
$sth = $dbh->do("UNLOCK TABLES ") || die $DBI::errstr;
|
$sth = $dbh->do("UNLOCK TABLES") || die $DBI::errstr;
|
||||||
}
|
}
|
||||||
$sth = $dbh->do("drop table bench1") or die $DBI::errstr;
|
$sth = $dbh->do("drop table bench1") or die $DBI::errstr;
|
||||||
}
|
}
|
||||||
@ -1029,7 +1053,15 @@ if ($server->small_rollback_segment())
|
|||||||
}
|
}
|
||||||
if ($opt_fast && defined($server->{vacuum}))
|
if ($opt_fast && defined($server->{vacuum}))
|
||||||
{
|
{
|
||||||
$server->vacuum(1,\$dbh);
|
if ($opt_lock_tables)
|
||||||
|
{
|
||||||
|
do_query($dbh,"UNLOCK TABLES");
|
||||||
|
}
|
||||||
|
$server->vacuum(1,\$dbh,"bench1");
|
||||||
|
if ($opt_lock_tables)
|
||||||
|
{
|
||||||
|
$sth = $dbh->do("LOCK TABLES bench1 WRITE") || die $DBI::errstr;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#
|
#
|
||||||
@ -1054,7 +1086,15 @@ if ($server->small_rollback_segment())
|
|||||||
}
|
}
|
||||||
if ($opt_fast && defined($server->{vacuum}))
|
if ($opt_fast && defined($server->{vacuum}))
|
||||||
{
|
{
|
||||||
$server->vacuum(1,\$dbh);
|
if ($opt_lock_tables)
|
||||||
|
{
|
||||||
|
do_query($dbh,"UNLOCK TABLES");
|
||||||
|
}
|
||||||
|
$server->vacuum(1,\$dbh,"bench1");
|
||||||
|
if ($opt_lock_tables)
|
||||||
|
{
|
||||||
|
$sth = $dbh->do("LOCK TABLES bench1 WRITE") || die $DBI::errstr;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($server->small_rollback_segment())
|
if ($server->small_rollback_segment())
|
||||||
|
@ -109,9 +109,19 @@ $end_time=new Benchmark;
|
|||||||
print "Time to insert ($opt_loop_count): " .
|
print "Time to insert ($opt_loop_count): " .
|
||||||
timestr(timediff($end_time, $loop_time),"all") . "\n\n";
|
timestr(timediff($end_time, $loop_time),"all") . "\n\n";
|
||||||
|
|
||||||
|
if ($opt_lock_tables)
|
||||||
|
{
|
||||||
|
do_query($dbh,"UNLOCK TABLES");
|
||||||
|
}
|
||||||
|
|
||||||
if ($opt_fast && defined($server->{vacuum}))
|
if ($opt_fast && defined($server->{vacuum}))
|
||||||
{
|
{
|
||||||
$server->vacuum(0,\$dbh);
|
$server->vacuum(0,\$dbh,"bench1");
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($opt_lock_tables)
|
||||||
|
{
|
||||||
|
do_query($dbh,"LOCK TABLES bench1 WRITE");
|
||||||
}
|
}
|
||||||
|
|
||||||
####
|
####
|
||||||
|
@ -65,10 +65,10 @@ if (!$opt_skip_create)
|
|||||||
print "Time for create_table ($#tables): " .
|
print "Time for create_table ($#tables): " .
|
||||||
timestr(timediff($end_time, $loop_time),"all") . "\n\n";
|
timestr(timediff($end_time, $loop_time),"all") . "\n\n";
|
||||||
|
|
||||||
if ($opt_fast && defined($server->{vacuum}))
|
if ($opt_fast && defined($server->{vacuum}))
|
||||||
{
|
{
|
||||||
$server->vacuum(1,\$dbh);
|
$server->vacuum(1,\$dbh);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
####
|
####
|
||||||
@ -124,6 +124,10 @@ else
|
|||||||
}
|
}
|
||||||
close(DATA);
|
close(DATA);
|
||||||
}
|
}
|
||||||
|
if ($opt_lock_tables)
|
||||||
|
{
|
||||||
|
do_query($dbh,"UNLOCK TABLES");
|
||||||
|
}
|
||||||
$end_time=new Benchmark;
|
$end_time=new Benchmark;
|
||||||
print "Time to insert ($row_count): " .
|
print "Time to insert ($row_count): " .
|
||||||
timestr(timediff($end_time, $loop_time),"all") . "\n";
|
timestr(timediff($end_time, $loop_time),"all") . "\n";
|
||||||
@ -138,7 +142,14 @@ if ($server->small_rollback_segment())
|
|||||||
|
|
||||||
if ($opt_fast && defined($server->{vacuum}))
|
if ($opt_fast && defined($server->{vacuum}))
|
||||||
{
|
{
|
||||||
$server->vacuum(0,\$dbh);
|
$server->vacuum(0,\$dbh,@table_names);
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($opt_lock_tables)
|
||||||
|
{
|
||||||
|
@tmp=@table_names; push(@tmp,@extra_names);
|
||||||
|
$sth = $dbh->do("LOCK TABLES " . join(" WRITE,", @tmp) . " WRITE") ||
|
||||||
|
die $DBI::errstr;
|
||||||
}
|
}
|
||||||
|
|
||||||
$loop_time= $end_time;
|
$loop_time= $end_time;
|
||||||
|
@ -2620,9 +2620,9 @@ bool Field_time::get_time(TIME *ltime)
|
|||||||
ltime->neg= 1;
|
ltime->neg= 1;
|
||||||
tmp=-tmp;
|
tmp=-tmp;
|
||||||
}
|
}
|
||||||
ltime->day=tmp/10000;
|
ltime->hour=tmp/10000;
|
||||||
tmp-=ltime->day*10000;
|
tmp-=ltime->hour*10000;
|
||||||
ltime->hour= tmp/100;
|
ltime->minute= tmp/100;
|
||||||
ltime->second= tmp % 100;
|
ltime->second= tmp % 100;
|
||||||
ltime->second_part=0;
|
ltime->second_part=0;
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -848,7 +848,8 @@ public:
|
|||||||
{
|
{
|
||||||
if (!master)
|
if (!master)
|
||||||
{
|
{
|
||||||
ft_close_search(ft_handler);
|
if (ft_handler)
|
||||||
|
ft_close_search(ft_handler);
|
||||||
if(join_key)
|
if(join_key)
|
||||||
table->file->ft_handler=0;
|
table->file->ft_handler=0;
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user