mysql select ข้อมูลช้ามากครับ

เกี่ยวกับ ปัญหาการใช้งาน การติดตั้ง ฐานข้อมูล MySql Oracle MSSQL ect...
การเขียน คำสั่ง SQL เพื่อดึกข้อมูล บอร์ดนี้ควรระบุโครงสร้างตารางของท่านในคำถามด้วยนะ

Moderator: mindphp

iTon

mysql select ข้อมูลช้ามากครับ

Post by iTon » 11/09/2014 8:49 pm

ขอบอกเบื้องต้นครับ (บนฐานที่ว่าเครื่องไม่ได้อยู่ที่ไทย ทั้งด้าน OS Hardware ไม่สามารถแตะต้องได้ครับ)
ทำได้แค่เพียง tuning sql และ structure ให้สามารถ select ข้อมูลได้เร็วขึ้นเท่านั้น

select count(*) from events ใช้เวลา 16.06 sec
ผลลัพท์ 18,629,084 rows

select count(*) from events where billing_period=201203 ใช้เวลา 0.69 sec
ผลลัพท์ 254,150 rows

ผมบังคับใช้ index ตรงๆ เลย จริงๆ column นี้ create index อยู่แล้ว
select * from events use index(billing_period) where billing_period=201203 ใช้เวลา 945.62 sec หรือ 15 นาที ได้แค่ 92,000 rows ดังนั้น ถ้ารอก็คงประมาณ 30 นาที

คำถามทำไม 2 แสน กว่าๆ ถึงใช้เวลานานขนาดนั้น ทั้งๆ ที่ยังไม่ได้ join อะไรกันเลยครับ ผมจะปรับอะไรได้บ้างครับ

User avatar
mindphp
ผู้ดูแลระบบ MindPHP
ผู้ดูแลระบบ MindPHP
Posts: 23800
Joined: 22/09/2008 6:18 pm
Contact:

Re: mysql select ข้อมูลช้ามากครับ

Post by mindphp » 12/09/2014 2:07 pm

มีตัวอย่าง ไฟล์ config mysql ไหมครับ
ขอดู รายละเอียด space server ด้วยครับ
ติดตาม VDO: http://www.youtube.com/c/MindphpVideoman
ติดตาม FB: https://www.facebook.com/pages/MindphpC ... 9517401606
หมวดแชร์ความรู้: https://www.mindphp.com/forums/viewforum.php?f=29
รับอบรม และพัฒนาระบบ: https://www.mindphp.com/forums/viewtopic.php?f=6&t=2042

iTon

Re: mysql select ข้อมูลช้ามากครับ

Post by iTon » 14/09/2014 6:42 pm

mindphp wrote:มีตัวอย่าง ไฟล์ config mysql ไหมครับ
ขอดู รายละเอียด space server ด้วยครับ
[mysql@mw-db02 ~]$ df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/vg_db03-lv_root
1.8T 456G 1.3T 27% /
tmpfs 4.0G 0 4.0G 0% /dev/shm
/dev/sda1 194M 40M 145M 22% /boot

top - 11:36:50 up 1069 days, 9:39, 2 users, load average: 0.24, 0.29, 0.27
Tasks: 116 total, 2 running, 114 sleeping, 0 stopped, 0 zombie
Cpu(s): 0.5%us, 0.0%sy, 0.0%ni, 99.5%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Mem: 8193552k total, 8102112k used, 91440k free, 132644k buffers
Swap: 10305528k total, 404192k used, 9901336k free, 4811616k cached


#
# Port and the socket
#
port = 3306
#
socket = /tmp/mysqld.sock
#
#password = my_password

#
#----------------------------------------------------------------
#

[safe_mysqld]

#
# Log file
#
err-log = /database/logs/mysql.err

#
#----------------------------------------------------------------
#

[mysqld]
skip_name_resolve

#
# Server ID must be unique to allow for replication
# Our servers are named: 1 - master -or- 2 - slave
# then the server number so mw-db02 (master) would
# be 1002, while slave mw-db03 would be 2003
#
server-id = 1002
auto-increment-increment = 4
auto-increment-offset = 2
#innodb_flush_log_at_trx_commit = 1
innodb_flush_log_at_trx_commit = 2
#sync_binlog = 1
sync_binlog = 0
socket = /tmp/mysqld.sock
max-connections = 300
max-allowed-packet=8M
basedir = /database/mysql
datadir = /database/data
tmpdir = /database/tmp
log-error = /database/logs/mysqld.err
pid-file = /var/run/mysqld/mysqld.pid
#log-bin=mysqld-bin
#binlog-format = row
slave_exec_mode=IDEMPOTENT

# The number of days to keep binary logs before they are automatically purged
expire_logs_days=30
relay-log=mysqld-relay-bin
#
skip-slave-start
#read-only
#
innodb-data-home-dir = /database/data
innodb-data-file-path = ibdata1:10M:autoextend
innodb-file-per-table
innodb-log-file-size = 128M # 4GB RAM

# Buffer pool size
innodb-buffer-pool-size = 2G # 4GB RAM
innodb-log-group-home-dir = /database/logs/innodb

# Character set and collation
character-set-server=utf8

#----------------------------------------------------------------
open_files_limit=4000
table_definition_cache=3000
table_open_cache=3000
query_cache_size=102400
log-queries-not-using-indexes=1

iTon
PHP Newbie
PHP Newbie
Posts: 1
Joined: 14/09/2014 6:48 pm

Re: mysql select ข้อมูลช้ามากครับ

Post by iTon » 14/09/2014 6:50 pm

[mysql@mw-db02 ~]$ df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/vg_db03-lv_root
1.8T 456G 1.3T 27% /
tmpfs 4.0G 0 4.0G 0% /dev/shm
/dev/sda1 194M 40M 145M 22% /boot
[mysql@mw-db02 ~]$ top

top - 11:37:17 up 1069 days, 9:40, 2 users, load average: 0.28, 0.29, 0.27
Tasks: 116 total, 1 running, 115 sleeping, 0 stopped, 0 zombie
Cpu(s): 4.6%us, 0.2%sy, 0.0%ni, 92.7%id, 2.5%wa, 0.0%hi, 0.0%si, 0.0%st
Mem: 8193552k total, 8102228k used, 91324k free, 132652k buffers
Swap: 10305528k total, 404192k used, 9901336k free, 4811688k cached

[client]

#
# These options apply to all client applications
#

#
# Port and the socket
#
port = 3306
#
socket = /tmp/mysqld.sock
#
#password = my_password

#
#----------------------------------------------------------------
#

[safe_mysqld]

#
# Log file
#
err-log = /database/logs/mysql.err

#
#----------------------------------------------------------------
#

[mysqld]
skip_name_resolve

#
# Server ID must be unique to allow for replication
# Our servers are named: 1 - master -or- 2 - slave
# then the server number so mw-db02 (master) would
# be 1002, while slave mw-db03 would be 2003
#
server-id = 1002
auto-increment-increment = 4
auto-increment-offset = 2
#innodb_flush_log_at_trx_commit = 1
innodb_flush_log_at_trx_commit = 2
#sync_binlog = 1
sync_binlog = 0
socket = /tmp/mysqld.sock
max-connections = 300
max-allowed-packet=8M
basedir = /database/mysql
datadir = /database/data
tmpdir = /database/tmp
log-error = /database/logs/mysqld.err
pid-file = /var/run/mysqld/mysqld.pid
#log-bin=mysqld-bin
#binlog-format = row
slave_exec_mode=IDEMPOTENT

# The number of days to keep binary logs before they are automatically purged
expire_logs_days=30
relay-log=mysqld-relay-bin
#
skip-slave-start
#read-only
#
innodb-data-home-dir = /database/data
innodb-data-file-path = ibdata1:10M:autoextend
innodb-file-per-table
innodb-log-file-size = 128M # 4GB RAM

# Buffer pool size
innodb-buffer-pool-size = 2G # 4GB RAM
innodb-log-group-home-dir = /database/logs/innodb

# Character set and collation
character-set-server=utf8

#----------------------------------------------------------------
open_files_limit=4000
table_definition_cache=3000
table_open_cache=3000
query_cache_size=102400
log-queries-not-using-indexes=1

User avatar
mindphp
ผู้ดูแลระบบ MindPHP
ผู้ดูแลระบบ MindPHP
Posts: 23800
Joined: 22/09/2008 6:18 pm
Contact:

Re: mysql select ข้อมูลช้ามากครับ

Post by mindphp » 05/10/2014 10:22 pm

เลือก เปิด slow query log เพื่อเช็คว่า มันทำงานช้าที่ Query อันไหน แล้วแก้วิเคราะห์ ว่ามาจากสาเหตุไหน เพื่อ หาทางตั้งค่าใหม่
หรือใช้ mysql turner ดูค่าเบื้องต้นก่อนก็ได้ครับ
ติดตาม VDO: http://www.youtube.com/c/MindphpVideoman
ติดตาม FB: https://www.facebook.com/pages/MindphpC ... 9517401606
หมวดแชร์ความรู้: https://www.mindphp.com/forums/viewforum.php?f=29
รับอบรม และพัฒนาระบบ: https://www.mindphp.com/forums/viewtopic.php?f=6&t=2042

Post Reply
  • Similar Topics
    Replies
    Views
    Last post

Return to “SQL - Database”

Who is online

Users browsing this forum: No registered users and 24 guests