summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorunknown <monty@donna.mysql.com>2000-11-20 22:25:59 +0200
committerunknown <monty@donna.mysql.com>2000-11-20 22:25:59 +0200
commit166df4ee474f42487f0cdd8db4fe298f3528a1c0 (patch)
tree5390b25e6e61ec56f90e454a33b6e630e70b02a4
parentc21988993eaa0fe8d7c85e75559fbaf0d613222c (diff)
downloadmariadb-git-166df4ee474f42487f0cdd8db4fe298f3528a1c0.tar.gz
Fixed performance bug in lock tables
Docs/manual.texi: Updated changelog mysys/thr_lock.c: Fixed bad performance bug when using SELECT, INSERT and UPDATE strings/llstr.c: change llstr() to output signed strings
-rw-r--r--Docs/manual.texi8
-rw-r--r--mysys/thr_lock.c6
-rw-r--r--strings/llstr.c2
3 files changed, 12 insertions, 4 deletions
diff --git a/Docs/manual.texi b/Docs/manual.texi
index 4afbe8cf76b..b6095302cff 100644
--- a/Docs/manual.texi
+++ b/Docs/manual.texi
@@ -38723,6 +38723,12 @@ though, so Version 3.23 is not released as a stable version yet.
@appendixsubsec Changes in release 3.23.28
@itemize @bullet
@item
+Fixed a major performance bug in the table locking code when you
+constantly had a LOT of @code{SELECT} running on a table on which you
+also did a lot of @code{UPDATE} and @code{INSERT}. The symptom was that
+the @code{UPDATE} and @code{INSERT} queries was locked a long time
+while @code{SELECT} statements where executed without locks.
+@item
One can now specify @code{interactive-timeout} in the option file that
is read by @code{mysql_options()}. This makes it possible to force
programs that runs for a long time (like @code{mysqlhotcopy}) to use
@@ -43268,6 +43274,8 @@ Secure connections (with SSL).
@item
Extend the optimizer to be able to optimize some
@code{ORDER BY key_name DESC} queries.
+@item
+New key cache
@end itemize
@node TODO future, TODO sometime, TODO MySQL 4.0, TODO
diff --git a/mysys/thr_lock.c b/mysys/thr_lock.c
index b9a9d5274ee..5c48ad435a4 100644
--- a/mysys/thr_lock.c
+++ b/mysys/thr_lock.c
@@ -653,7 +653,7 @@ void thr_unlock(THR_LOCK_DATA *data)
data->type=TL_UNLOCK; /* Mark unlocked */
check_locks(lock,"after releasing lock",1);
- if (!lock->write.data) /* If no active read locks */
+ if (!lock->write.data) /* If no active write locks */
{
data=lock->write_wait.data;
if (!lock->read.data) /* If no more locks in use */
@@ -742,7 +742,7 @@ void thr_unlock(THR_LOCK_DATA *data)
data->next->prev= data->prev;
else
lock->write_wait.last=data->prev;
- (*lock->write.last)=data; /* Put in execute list */
+ (*lock->write.last)=data; /* Put in execute list */
data->prev=lock->write.last;
lock->write.last= &data->next;
data->next=0; /* Only one write lock */
@@ -756,7 +756,7 @@ void thr_unlock(THR_LOCK_DATA *data)
(lock_type == TL_WRITE_CONCURRENT_INSERT ||
lock_type == TL_WRITE_ALLOW_WRITE));
}
- else if (lock->read_wait.data)
+ else if (!data && lock->read_wait.data)
free_all_read_locks(lock,0);
}
end:
diff --git a/strings/llstr.c b/strings/llstr.c
index a8514d7e369..470645a4f65 100644
--- a/strings/llstr.c
+++ b/strings/llstr.c
@@ -31,6 +31,6 @@
char *llstr(longlong value,char *buff)
{
- longlong2str(value,buff,10);
+ longlong2str(value,buff,-10);
return buff;
}