PHWinfo banniere

Titres
PORTAIL ANNUAIRE ARTICLES COMPARATEUR HÉBERGEURS DEVIS FORUMS RÉDUCTEUR D'URL
Précédent   PHWinfo > Autres forums > Forum Programmation & Conception > comp.databases.mysql > How to avoid slow reading MYD file?
S'inscrire FAQ Membres Recherche Messages du jour Marquer les forums comme lus
How to avoid slow reading MYD file?

Réponse
 
LinkBack Outils de la discussion
Vieux 24/10/2007, 14h50   #1
BankHacker
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut How to avoid slow reading MYD file?

I am trying to find out why MySQL has to read MYD data file when just
doing an index query like this:

SELECT COUNT(*) FROM articles WHERE MATCH (title,body) AGAINST
('keyword');

This is a table with just 2 fields and it has been indexed with full-
text option this way:

CREATE TABLE articles ( id INT UNSIGNED AUTO_INCREMENT NOT NULL
PRIMARY KEY, title VARCHAR(200), body TEXT, FULLTEXT (title,body) );

I was though MYD file was read only when querying for data not stored
in MYI file, but that idea seems to be wrong.

Any explanation or hint? Thanks in advance.

P.S.: You may get further details in http://mysql-full-text.blogspot.com/

  Réponse avec citation
Vieux 24/10/2007, 15h28   #2
Axel Schwenke
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: How to avoid slow reading MYD file?

BankHacker <webmaster@bankhacker.com> wrote:

> I am trying to find out why MySQL has to read MYD data file when just
> doing an index query like this:
>
> SELECT COUNT(*) FROM articles WHERE MATCH (title,body) AGAINST
> ('keyword');


....

> P.S.: You may get further details in http://mysql-full-text.blogspot.com/


1. an index on a MyISAM table does not refer to the PK, but to the
physical address (or row number) of the row.

2. how do you *know* MySQL is reading from the MYD file?

3. use EXPLAIN to see how your query will be executed.
If it shows "using index" then no datafile reads will be done.


XL
--
Axel Schwenke, Support Engineer, MySQL AB

Online User Manual: http://dev.mysql.com/doc/refman/5.0/en/
MySQL User Forums: http://forums.mysql.com/
  Réponse avec citation
Vieux 24/10/2007, 21h51   #3
BankHacker
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: How to avoid slow reading MYD file?

1.- What is the PK? Primary Key?

1b.- The query is a count of registers, so it doesn´t matter what kind
of pointer is the index using, isn't it?

2.- I know MySQL is reading the MYD file because I reboot the server
and then I force a reading of MYD file in order to be cached by the
filesystem. Then I measure the query reply speed. Secondly I do the
same process (including reboot) but not caching MYD file. The timings
are extremely diffrent in each case. In the first case query responds
in 0.1 seconds. In the second case query takes up to 5.0 seconds. So I
conclude: MySQL is reading MYD file. Take into account that the MYD
file is 100Mb in size.

3.- The query should use the full-text index. Look at the EXPLAIN
result: (key = title)

mysql> EXPLAIN SELECT COUNT(*) FROM articles WHERE MATCH (title,body)
AGAINST ('keyword');
+----------+----------+---------------+-------+---------+------+------
+------------+
| table | type | possible_keys | key | key_len | ref | rows
| Extra |
+----------+----------+---------------+-------+---------+------+------
+------------+
| articles | fulltext | title | title | 0 | | 1
| where used |
+----------+----------+---------------+-------+---------+------+------
+------------+
1 row in set (0.02 sec)

Thanks a lot for your . Any further hint will also make me very
thankful.

  Réponse avec citation
Vieux 24/10/2007, 22h55   #4
Brian Wakem
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: How to avoid slow reading MYD file?

BankHacker wrote:

> 1.- What is the PK? Primary Key?
>
> 1b.- The query is a count of registers, so it doesn´t matter what kind
> of pointer is the index using, isn't it?
>
> 2.- I know MySQL is reading the MYD file because I reboot the server
> and then I force a reading of MYD file in order to be cached by the
> filesystem. Then I measure the query reply speed. Secondly I do the
> same process (including reboot) but not caching MYD file. The timings
> are extremely diffrent in each case. In the first case query responds
> in 0.1 seconds. In the second case query takes up to 5.0 seconds. So I
> conclude: MySQL is reading MYD file. Take into account that the MYD
> file is 100Mb in size.



Forcing a filesystem cache of the table is probably loading the index into
memory too. In the second case you are not, so the extra time is probably
spent reading the index from disk, not the data file.


--
Brian Wakem
  Réponse avec citation
Vieux 24/10/2007, 23h23   #5
Axel Schwenke
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: How to avoid slow reading MYD file?

BankHacker <webmaster@bankhacker.com> wrote:

> 1.- What is the PK? Primary Key?


yep

> 1b.- The query is a count of registers, so it doesn't matter what kind
> of pointer is the index using, isn't it?


For SELECT COUNT(*) not. But for SELECT id it does.

> 2.- I know MySQL is reading the MYD file because I reboot the server
> and then I force a reading of MYD file in order to be cached by the
> filesystem. Then I measure the query reply speed.


Ähem. This is not conclusive at all. EXPLAIN is.

> 3.- The query should use the full-text index. Look at the EXPLAIN
> result: (key = title)
>
> mysql> EXPLAIN SELECT COUNT(*) FROM articles WHERE MATCH (title,body)
> AGAINST ('keyword');
> +----------+----------+---------------+-------+---------+------+------
> +------------+
>| table | type | possible_keys | key | key_len | ref | rows
>| Extra |
> +----------+----------+---------------+-------+---------+------+------
> +------------+
>| articles | fulltext | title | title | 0 | | 1
>| where used |
> +----------+----------+---------------+-------+---------+------+------
> +------------+
> 1 row in set (0.02 sec)


This looks a little strange. The index is used, but key_len == 0 and
there is "where used" where I expect "using index". Maybe your index
is broken? Or something charset related?

> Thanks a lot for your . Any further hint will also make me very
> thankful.


I'm afraid I wasn't too ful. Maybe you find some better answer in
our forums.


XL
--
Axel Schwenke, Support Engineer, MySQL AB

Online User Manual: http://dev.mysql.com/doc/refman/5.0/en/
MySQL User Forums: http://forums.mysql.com/
  Réponse avec citation
Vieux 25/10/2007, 00h12   #6
BankHacker
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: How to avoid slow reading MYD file?

But I am not loading the full table in cache, just only the
corresponding MYD file as follows:

# cat /var/lib/mysql/full_text_investigations/*.MYD > /dev/null

The increment in cache size obtained through the "free" command
matches with the MYD file size.

Thence, we can be sure that the query needs to read the MYD file, in
order to explain the penalty in the bechmarks when not caching the
file.

Thanks.

  Réponse avec citation
Vieux 25/10/2007, 00h23   #7
BankHacker
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: How to avoid slow reading MYD file?

The MySQL version I am using is 3.23.58. This might be the cause of
the "where used" message instead of the "using index" you expected.

I am going to do these tests under last MySQL version, and then I will
report the results.

Thanks again.

  Réponse avec citation
Vieux 25/10/2007, 03h19   #8
BankHacker
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: How to avoid slow reading MYD file?

I have just install MySQL 5.0.22 and the EXPLAIN commands throws the
same result:

mysql> EXPLAIN SELECT COUNT(*) FROM articles WHERE MATCH (title,body)
AGAINST ('pantanos');
+----+-------------+----------+----------+---------------+-------
+---------+------+------+-------------+
| id | select_type | table | type | possible_keys | key |
key_len | ref | rows | Extra |
+----+-------------+----------+----------+---------------+-------
+---------+------+------+-------------+
| 1 | SIMPLE | articles | fulltext | title | title |
0 | NULL | 1 | Using where |
+----+-------------+----------+----------+---------------+-------
+---------+------+------+-------------+

Thanks.

  Réponse avec citation
Réponse


Outils de la discussion

Règles de messages
Vous ne pouvez pas créer de nouvelles discussions
Vous ne pouvez pas envoyer des réponses
Vous ne pouvez pas envoyer des pièces jointes
Vous ne pouvez pas modifier vos messages

Les balises BB sont activées : oui
Les smileys sont activés : oui
La balise [IMG] est activée : oui
Le code HTML peut être employé : non
Trackbacks are oui
Pingbacks are oui
Refbacks are oui


Fuseau horaire GMT +1. Il est actuellement 00h51.


Édité par : vBulletin® version 3.7.3
Copyright ©2000 - 2008, Jelsoft Enterprises Ltd.
Search Engine Friendly URLs by vBSEO 3.2.0 RC5 Tous droits réservés.
Version française #16 par l'association vBulletin francophone
PHWinfo est un site Éducation Sans Frontières ©2000-2008
Ad Management by RedTyger
©Tous droits réservés par les parties respectives
Page generated in 0,13593 seconds with 16 queries