Commit 9fa67f2c authored by unknown's avatar unknown

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
parent c7ea0ab1
......@@ -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
......@@ -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:
......
......@@ -31,6 +31,6 @@
char *llstr(longlong value,char *buff)
{
longlong2str(value,buff,10);
longlong2str(value,buff,-10);
return buff;
}
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment