Hi Heikki,


Heikki Tuuri wrote:

Don,

it is the assertion below which fails.

Do you use FOREIGN KEY .... ON UPDATE CASCADE?


Nope.


Do you have any idea which query causes the crash?


I didn't, but after Googling for similar problems, I found a thread where you had talked about a bug in a column prefix index. (here's the message: http://archives.neohapsis.com/archives/mysql/2003-q4/0697.html )


I was fairly sure I wasn't using any column prefix indexes, but sure enough, there was one. I removed the index, and MySQL has stopped crashing completely.

Now, it's entirely possible that whichever user was submitting some query just stopped at the same time I removed that index. But prior to my doing that, MySQL was crashing every few minutes. Probably a dozen times within an hour or two.

I'm keeping a close eye on it, and if it happens again, I'll turn the query log on to see if I can catch it.

Please run CHECK TABLE on suspicious tables.

Can you test on an x86 computer?


I would be happy to, but since I don't know which query is doing it, I'm not sure it'd be much use. I can't easily put an x86 box into production to get the same load on it.


Have you changed the default character set of the server in my.cnf?


Nope.


Can you please send me your my.cnf.


Here it is. I actually had the innodb buffer set to 4G before, and lowered it to see if we were still hitting some old 32bit limit or something. Of course, there was no change, the crashes still occurred.


FWIW, this on Red Hat Enterprise 3 for AMD64.

---

[mysqld]
datadir         = /xserve1/mysql
port            = 3306
socket          = /tmp/mysql.sock
pid-file        = /xserve1/mysql/zeus.pid
skip-external-locking
set-variable    = key_buffer=256M
set-variable    = max_allowed_packet=10M
set-variable    = table_cache=256
set-variable    = sort_buffer=1M
set-variable    = read_buffer_size=1M
set-variable    = thread_cache=8
set-variable    = thread_concurrency=4
set-variable    = myisam_sort_buffer_size=512M
set-variable    = query_cache_size=512M
set-variable    = query_cache_type=1
set-variable    = max_connections=500
set-variable    = long_query_time=1

log-bin
server-id=1

innodb_data_home_dir = /xserve1/mysql/
innodb_data_file_path = ibdata1:10M:autoextend
innodb_log_group_home_dir = /xserve1/mysql/
innodb_log_arch_dir = /xserve1/mysql/
set-variable = innodb_buffer_pool_size=2G
set-variable = innodb_additional_mem_pool_size=20M
set-variable = innodb_log_file_size=512M
set-variable = innodb_log_buffer_size=8M
innodb_flush_log_at_trx_commit=1
set-variable = innodb_lock_wait_timeout=50

log-slow-queries
log-error
open-files-limit=8192
ft_min_word_len=3

max_connect_errors = 1000000000

---

Thanks for your reply! Please let me know if there's anything else I can do. I'm happy to help test and debug.

Don


Heikki Tuuri
Innobase Oy
http://www.innodb.com
Foreign keys, transactions, and row level locking for MySQL
InnoDB Hot Backup - hot backup tool for InnoDB which also backs up MyISAM
tables


Order MySQL technical support from https://order.mysql.com/





.................. Builds an update vector from those fields which in a secondary index entry differ from a record that has the equal ordering fields. NOTE: we compare the fields as binary strings! */

upd_t*
row_upd_build_sec_rec_difference_binary(
/*====================================*/
                                /* out, own: update vector of differing
                                fields */
        dict_index_t*   index,  /* in: index */
        dtuple_t*       entry,  /* in: entry to insert */
        rec_t*          rec,    /* in: secondary index record */
        mem_heap_t*     heap)   /* in: memory heap from which allocated */
{
        upd_field_t*    upd_field;
        dfield_t*       dfield;
        byte*           data;
        ulint           len;
        upd_t*          update;
        ulint           n_diff;
        ulint           i;

        /* This function is used only for a secondary index */
        ut_ad(0 == (index->type & DICT_CLUSTERED));

update = upd_create(dtuple_get_n_fields(entry), heap);

n_diff = 0;

for (i = 0; i < dtuple_get_n_fields(entry); i++) {

data = rec_get_nth_field(rec, i, &len);

dfield = dtuple_get_nth_field(entry, i);

ut_a(len == dfield_get_len(dfield));


----- Original Message ----- From: "Don MacAskill" <[EMAIL PROTECTED]>
Newsgroups: mailing.database.myodbc
Sent: Wednesday, December 10, 2003 7:49 PM
Subject: MySQL 4.0.16 64bit crash report




I'm running 4.0.16 on a dual-Opteron using the 64bit mysql-max binary
distribution (tar.gz, not rpm) from mysql.com.  I have 8GB of RAM, and
it was using about 4.5GB at the time of the crash.

031210  9:24:34  InnoDB: Assertion failure in thread 1171265904 in file
row0upd.c line 713
InnoDB: Failing assertion: len == dfield_get_len(dfield)
InnoDB: We intentionally generate a memory trap.
InnoDB: Send a detailed bug report to [EMAIL PROTECTED]
InnoDB: Thread 1183455600 stopped in file ha_innodb.cc line 396
InnoDB: Thread 1176770928 stopped in file ha_innodb.cc line 396
mysqld got signal 11;
This could be because you hit a bug. It is also possible that this binary
or one of the libraries it was linked against is corrupt, improperly

built,


or misconfigured. This error can also be caused by malfunctioning

hardware.


We will try our best to scrape up some info that will hopefully help
diagnose
the problem, but since we have already crashed, something is definitely
wrong
and this may fail.

key_buffer_size=268435456
read_buffer_size=1044480
max_used_connections=336
max_connections=500
threads_connected=143
It is possible that mysqld could use up to
key_buffer_size + (read_buffer_size + sort_buffer_size)*max_connections
= 1284140 K
bytes of memory
Hope that's ok; if not, decrease some variables in the equation.

InnoDB: Thread 1174018416 stopped in file ha_innodb.cc line 396
InnoDB: Thread 1214912880 stopped in file ha_innodb.cc line 396

Number of processes running now: 0


Any ideas?


Thanks,

Don





--
MySQL General Mailing List
For list archives: http://lists.mysql.com/mysql
To unsubscribe:

http://lists.mysql.com/[EMAIL PROTECTED]






--
MySQL General Mailing List
For list archives: http://lists.mysql.com/mysql
To unsubscribe:    http://lists.mysql.com/[EMAIL PROTECTED]



Reply via email to