Richard,

are you sure you do not have open transactions in your system?

How do you update the table raw or insert to it?

Note that also an ordinary SELECT starts a transaction.

The problem could be caused by old versions of rows in table raw. InnoDB
cannot purge them if there is a transaction open which might still see the
old versions.

The table status means that your table is occupying about 183 MB.

If you disconnect your application and wait for a while, does the table raw
shrink to a realistic size because purge is done in the background?

Regards,

Heikki


At 01:55 PM 11/19/01 -0000, you wrote:
>There is definitly something to do with this row count that is causing a
>problem. My table uses no blobs.
>CREATE TABLE `raw` (
>  `cid` int(11) default NULL,
>  `agent` char(255) default NULL,
>  `referer` char(255) default NULL,
>  `addr` char(15) default NULL,
>  `via` char(255) default NULL,
>  `forward` char(15) default NULL,
>  `ctime` datetime default NULL,
>  `uniq` int(1) default NULL,
>  KEY `age` (`ctime`)
>) TYPE=InnoDB
>
>again just now the database slowed down to a crawl and a table status shows
>| raw            | InnoDB | Fixed      | 178241 |           1027 |
>183222272 |            NULL |      4734976 |         0 |           NULL |
>NULL                | NULL                | NULL       |                |
>InnoDB free: 3225600 kB |
>
>that again it seems to think is has 180K rows when there can't be more than
>2K-5K rows. I tried changing the table truncate to a delete from which
>solved nothing. To give you an example of the slowdown. Here is a query
>running properly
>
>   CREATE TEMPORARY TABLE `pagehits_tmp` (
>                                           `cid` int(11) default NULL,
>                                           `referer` char(255) default NULL,
>                                           `hits` bigint(21) NOT NULL
>default '0',
>                                           `ctime` datetime default NULL,
>                                           index day (ctime,cid,referer)
>                                           ) TYPE=innodb
>
>inserting summary of pagehits into pagehits_tmp -
>insert into pagehits_tmp select cid,referer,count(*) as hits,
>date_format(ctime,'%Y-%m-%d %H:00:00') as ctime from raw WHERE uniq=1 group
>by cid,referer
>
>create sum of old hits + new hits -
>create temporary table pagehits_sum select s1.cid as cid,s1.referer as
>val,s1.hits+ifnull(s2.hits,0) as hits, s1.ctime from pagehits_tmp as s1 left
>join pagehits_hr as s2 on s1.cid=s2.cid AND s1.referer=s2.val
>
>replace new sum's into pagehits_hr -
>replace into pagehits_hr (cid,val,hits,ctime) select cid,val,hits,ctime from
>pagehits_sum
>drop temporary tables
>
>Time taken = 0.858478 secs
>
>... and here is after it starts slowing down
>
>CREATE TEMPORARY TABLE `pagehits_tmp` (
>                                           `cid` int(11) default NULL,
>                                           `referer` char(255) default NULL,
>                                           `hits` bigint(21) NOT NULL
>default '0',
>                                           `ctime` datetime default NULL,
>                                           index day (ctime,cid,referer)
>                                           ) TYPE=innodb
>
>inserting summary of pagehits into pagehits_tmp
>insert into pagehits_tmp select cid,referer,count(*) as hits,
>date_format(ctime,'%Y-%m-%d %H:00:00') as ctime from raw WHERE uniq=1 group
>by cid,referer
>create sum of old hits + new hits
>create temporary table pagehits_sum select s1.cid as cid,s1.referer as
>val,s1.hits+ifnull(s2.hits,0) as hits, s1.ctime from pagehits_tmp as s1 left
>join pagehits_hr as s2 on s1.cid=s2.cid AND s1.referer=s2.val
>replace new sum's into pagehits_hr
>replace into pagehits_hr (cid,val,hits,ctime) select cid,val,hits,ctime from
>pagehits_sum
>drop temporary tables
>
>Time taken = 26.724891 secs (0 rows/sec)
>
>
>...........
>
>Raw contains no more rows than before and pagehits_hr contains at most 20K
>rows.
>
>Any ideas would be really welcome. Maybe I should change the delete from to
>a drop and create.
>
>Rich
>
>
>----- Original Message -----
>From: "Heikki Tuuri" <[EMAIL PROTECTED]>
>To: <[EMAIL PROTECTED]>
>Sent: Monday, November 19, 2001 8:10 AM
>Subject: Re: database slow down
>
>
>> Hi!
>>
>> >This is a followup to my previous messages indicating database slow down.
>> >After noticing the queries start to slow down earlier i decided to try
>and
>> >get some debug info. a show table status had one interesting thing.
>> >
>> >| raw            | InnoDB | Fixed      | 169681 |           1030 |
>> >174817280 |
>>
>> Sorry this is a known bug in SHOW TABLE STATUS in InnoDB. It estimates the
>> row count too big if you have big BLOBs in your table.
>>
>> >the 4th column being interesting. It seems to "think" there are 169,681
>rows
>> >but this isn't true. The query operates on about 2000 rows each time then
>> >deletes and commits them so why does it think there are 170K rows? Could
>> >this be a source of the problem. Any suggestions welcome.
>>
>> No, the estimate has no effect on TRUNCATE TABLE. But if you are running
>> MySQL-3.23, then TRUNCATE TABLE actually internally is DELETE FROM... and
>it
>> should not run any faster than DELETE FROM...
>>
>> If you need quick emptying in 3.23, use DROP TABLE + CREATE TABLE.
>>
>> >There is no particular query which causes this to happen because the same
>> >batch of queries are happening over and over and over again. So What
>could
>> >be wrong. It takes about 2 minutes to do a shutdown when its gets like
>this
>> >and either way I can't afford to restart the database once its
>implemented.
>> >
>> >As a note, a restart of the database sets the row count of raw to 0 so I
>> >really think it is related to this. Most of the queries revolve around
>this
>> >table so any problems with it are going to cause me big problems.
>> >
>> >Any help much appreciated.
>> >Richard
>>
>> Regards,
>>
>> Heikki
>>
>>
>>
>> ---------------------------------------------------------------------
>> Before posting, please check:
>>    http://www.mysql.com/manual.php   (the manual)
>>    http://lists.mysql.com/           (the list archive)
>>
>> To request this thread, e-mail <[EMAIL PROTECTED]>
>> To unsubscribe, e-mail <[EMAIL PROTECTED]>
>> Trouble unsubscribing? Try: http://lists.mysql.com/php/unsubscribe.php
>>
>
>



---------------------------------------------------------------------
Before posting, please check:
   http://www.mysql.com/manual.php   (the manual)
   http://lists.mysql.com/           (the list archive)

To request this thread, e-mail <[EMAIL PROTECTED]>
To unsubscribe, e-mail <[EMAIL PROTECTED]>
Trouble unsubscribing? Try: http://lists.mysql.com/php/unsubscribe.php

Reply via email to