mysql:531
From: Tatsuya Ina <Tatsuya Ina <ina@xxxxxxxxxx>>
Date: Wed, 13 Jan 1999 14:48:05 GMT
Subject: [mysql 531] mMySQL speed
はじめまして。伊奈@セイコーエプソン といいます。
年が明けてからMLに参加させて頂いています。
実は、今MySQLを使って工場内のデータを検索できるシステムを作ろうとしていますが、
私のところで動いているMySQLの検索スピードが妥当なのかどうか、まだチューニングの
余地があるのかどうか、皆さんに意見をお聞きしたくて、投稿させて頂きました。
データベースは全くの初心者なので、根本的に間違っているかもしれません。
アドバイスなど頂けるよう、よろしくお願いします。
約500万件のデータベースをLinux上のMySQLで動かしています。
比較のため、となりのPCにEmpressというRDBMSを入れて同様のシステムを作ってみました。
テスト用データベース構成
-------------------------------------------------------------------------------
MySQLテーブル仕様:
create table Test_all_tab
(
lotno char(22) NOT NULL,
order_no smallint NOT NULL,
param char(16) NOT NULL,
ope char(12) NOT NULL,
start_day datetime NOT NULL,
stop_day datetime NOT NULL,
pc_type char(16) NOT NULL,
pd char(16) NOT NULL,
kubun char(16) NOT NULL,
pc_no smallint NOT NULL,
good_wf smallint NOT NULL,
ng_wf smallint NOT NULL,
wfno smallint NOT NULL,
value char(64) NOT NULL,
index lotno_index (lotno),
index stop_day_index (stop_day),
unique param (lotno,order_no,param,ope));
OS: Slackware3.4ベース + Kernel 2.0.35)
ハードウェア構成: PentiumII(400) + 128M memory + URTRA SCSI 4G
MySQLはソースからコンパイル gcc version 2.7.2.3 + libc.so.5.4.38
MySQL 3.21.33b+linuxthreads-0.6
---------------------------------------------------------------------------------
Empressの場合
テーブル仕様:
create table Test_all_tab
(
lotno char(22) NOT NULL,
order_no int NOT NULL,
param char(16) NOT NULL,
ope char(12) NOT NULL,
start_day time(9) NOT NULL,
stop_day time(9) NOT NULL,
pc_type char(16) NOT NULL,
pd char(16) NOT NULL,
kubun char(16) NOT NULL,
pc_no int NOT NULL,
good_wf int NOT NULL,
ng_wf int NOT NULL,
wfno int NOT NULL,
value char(64) NOT NULL
);
create index Test_all_lotno_index on Test_all_tab(lotno);
create index Test_all_stop_day_index on Test_all_tab(stop_day);
create unique index Test_all_key on Test_all_tab(lotno,order_no,param,ope);
grant select on Test_all_tab to public;
ハードウェア構成: PentiumII(266) + 64M memory + EIDE 4G
OS: Turbo Linux 2.0 + Kernel 2.0.35)
Empress Ver.6.10
-------------------------------------------------------------------------------
作成したデータは4847180件であり、MySQLの起動時のパラメータは
デフォルトのまま。データの取得時間が挿入されるstop_dayの範囲は
1998/08/26 00:00:00 ~ 1998/12/29 23:59:59 です。
この構成で次の検索をしてみました。MySQLの場合はmysqlから行い、
Empressの場合には、mysqlと同様なempsqlというインターフェイスで行いました。
結果
(1)select count(*) from Test_all_tab where lotno like 'D15A0%'
この時、該当レコードは717505件あります。検索時間(3回の平均)は
Empress:37.5 sec MySQL:553.36 sec
(2)select count(*) from Test_all_tab where stop_day between '1998/11/14 00:00:00' \
and '1998/12/14 23:59:59'
この時、該当レコードは1118730件あります。検索時間(3回の平均)は
Empress:6.5 sec MySQL:385.8 sec
上記検索は、テスト用のものではなく、構築するシステムで、実際にもっとも使う検索
を想定してのものなので、これではMySQLではシステムを構築することはできません。
ハードウェア的にはEmpressの方が劣るのに、この差は「驚異的」です。
いくらEmpressがいわゆる「商用」であるとは言え、オープンソースソフトウェアに
の力を信じている私としては、この結果に納得がいきません。
safe_mysqldの起動時のパラメータもkey-buffer=16m sort_buffer=16m record_buffer=16m
とかやってみましたが、10sec程度速くなる程度で、劇的に速くはなりませんでした。
MySQLの付属ドキュメントの中には、開発元では、「5000万件のテーブルも稼働している」
というようなことが書いてあったと思います。それをみて、「500万件程度ならば大丈夫」
だろうと、考えMySQLで作ってみました。PC-UNIXでは500万件程度も無理なのでしょうか?
よろしくお願いいたします。
伊奈竜也 ina@xxxxxxxxxx
セイコーエプソン株式会社
半導体事業部 富士見事業所
IC製品技術部 F検査技術G
TEL 0266-61-1212
FAX 0266-61-1278
-> 531 1999-01-13 23:48 [Tatsuya Ina <ina@xxx] mMySQL speed 532 1999-01-13 15:31 ┣[民斗 <tommy@xxxxxxxx] 535 1999-01-14 01:34 ┃┣[Tatsuya Ina <ina@xxx] 538 1999-01-13 16:53 ┃┗[民斗 <tommy@xxxxxxxx] 534 1999-01-13 15:44 ┣[<takeshi@xxxxxxxxxx>] 541 1999-01-13 17:39 ┣[<takeshi@xxxxxxxxxx>] 546 1999-01-14 08:58 ┗[<takeshi@xxxxxxxxxx>]