On 8/14/13 10:46 AM, Manuel Arostegui wrote:
2013/8/14 Andy Wallace <awall...@ihouseweb.com <mailto:awall...@ihouseweb.com>>
Hey all -
We have been focusing on performance in our systems a lot lately, and have
made some pretty
good progress. Upgrading the mySQL engine from 5.1 to 5.5 was eye-opening.
But there are still issues, and one in particular is vexing. It seems like
a tuning problem
for sure - I notice this even at the command-line interface. I will have a
update command:
update my_table set test_column = 'tester_value' where key_value =
'a-test-key';
key_value is the primary key for my_table, which is an INNODB table, about
50MB, 96K rows
Can you provide the whole show create table for that table?
It's a big table:
CREATE TABLE `agent` (
`acnt` varchar(20) NOT NULL,
`passwd` varchar(20) NOT NULL,
`package` char(2) DEFAULT NULL,
`data_template` varchar(20) DEFAULT 'NULL',
`default_search_type` enum('1','2','3') NOT NULL DEFAULT '1',
`status` enum('A','T','P','C','D','X','S') NOT NULL COMMENT 'A=active, T=testdrive, D=deactivated, P=pending, C=in create state,
X=expired td,S=Suspended',
`flags` varchar(10) DEFAULT NULL COMMENT 'pipe-separated
flags',
`aliases` varchar(4000) NOT NULL DEFAULT '',
`offices` varchar(4000) NOT NULL DEFAULT '',
`license_no` varchar(40) NOT NULL DEFAULT '',
`agent_code` varchar(20) DEFAULT NULL,
`office_code` varchar(20) DEFAULT NULL,
`parent_acnt` varchar(20) DEFAULT NULL,
`number_of_agentlinks` int(11) DEFAULT NULL,
`number_of_emails` int(11) DEFAULT NULL,
`name` varchar(60) NOT NULL,
`fname` varchar(30) DEFAULT NULL,
`lname` varchar(30) DEFAULT NULL,
`contact` varchar(80) NOT NULL DEFAULT '',
`company` varchar(80) NOT NULL DEFAULT '',
`address` varchar(100) NOT NULL DEFAULT '',
`city` varchar(80) NOT NULL DEFAULT '',
`state` varchar(2) NOT NULL DEFAULT '',
`zip` varchar(10) NOT NULL DEFAULT '',
`country` varchar(80) NOT NULL DEFAULT '',
`phone` varchar(100) NOT NULL DEFAULT '',
`fax` varchar(100) DEFAULT NULL,
`textline1` varchar(100) NOT NULL DEFAULT '',
`textline2` varchar(100) NOT NULL DEFAULT '',
`textline3` varchar(100) NOT NULL DEFAULT '',
`textline4` varchar(100) NOT NULL DEFAULT '',
`domain` varchar(80) NOT NULL DEFAULT '',
`email` varchar(80) NOT NULL,
`url` varchar(200) NOT NULL DEFAULT '',
`state_restriction` varchar(150) NOT NULL DEFAULT '',
`county_restriction` varchar(4000) NOT NULL DEFAULT '',
`area_restriction` varchar(4000) NOT NULL DEFAULT '',
`city_restriction` text,
`ht_freq` enum('d','w') NOT NULL DEFAULT 'd',
`ht_dow` enum('1','2','3','4','5','6','7') NOT NULL DEFAULT
'1',
`signup_date` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
`disabled_date` datetime NOT NULL DEFAULT '0000-00-00
00:00:00',
`reactivation_date` date DEFAULT NULL,
`last_login_date` datetime DEFAULT NULL,
`testdrive_expires` date DEFAULT NULL,
`no_mls_value` varchar(100) DEFAULT NULL,
`internal_account` enum('N','Y') DEFAULT NULL,
`sample_account` enum('N','Y') NOT NULL DEFAULT 'N',
`is_ppc` enum('YES','NO') NOT NULL DEFAULT 'NO',
`is_leadbuilder` enum('YES','NO') NOT NULL DEFAULT 'NO',
`website_created` enum('N','Y') NOT NULL DEFAULT 'N',
`brand` int(11) NOT NULL DEFAULT '0',
`reseller_name` varchar(64) NOT NULL DEFAULT '',
`source_tracking` enum('wordpress') DEFAULT NULL,
`report_to_mls` enum('N','Y') NOT NULL DEFAULT 'Y',
`export_listings_to_parent` enum('N','Y') NOT NULL DEFAULT
'N',
`accepts_leads` enum('N','Y') DEFAULT 'Y',
`last_full_listing_update` datetime DEFAULT NULL,
`last_new_listing_update` datetime DEFAULT NULL,
`last_activity_reminder` datetime DEFAULT NULL,
`mobile_access_count` int(11) DEFAULT '0',
`testdrive_self_extend_count` int(11) DEFAULT '0',
`weak_password` enum('N','Y') DEFAULT 'N',
`weak_email_password` enum('N','Y') DEFAULT 'N',
PRIMARY KEY (`acnt`),
KEY `parent_acnt` (`parent_acnt`),
KEY `email` (`email`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
The update sample translates to:
update agent set domain = 'some_value.com' where acnt = 'some-account-id';
If I run this 10 times with different key values, most of the time, it will
return pretty
much instantaneously. But at least once, it will take 10, 20, 30 seconds to
return. This
affects our applications as well - operations that are generally fast will
suddenly be
very, very slow... and then back to fast.
OS: SunOS 5.10
SQL version: 5.5.33-log MySQL Community Server (GPL)
Hardware: Virtual Machine (VMWare), 4 cpus - 16GB RAM
Tuning section of my.cnf:
# tuning
key_buffer_size=512M
max_allowed_packet=16M
table_open_cache=512
sort_buffer_size=10M
read_buffer_size=10M
read_rnd_buffer_size=8M
myisam_sort_buffer_size=512M
thread_cache_size=8
query_cache_type=1
query_cache_size=1024M
query_cache_limit=10M
Have you done tests with query cache disabled? Depending on your workload you
might get some better performance.
Have not tried disabling it - we have thousands of clients, all editing things,
and many of our
automated processes hit this table as well (updating statuses and dates, etc).
# 2 x numcpus
#thread_concurrency=4
#innodb_thread_concurrency=0
#innodb_read_io_threads=16
#innodb_write_io_threads=16
# You can set .._buffer_pool_size up to 50 - 80 %
# of RAM but beware of setting memory usage too high
innodb_buffer_pool_size=2048M
Why only 2GB if you have 16GB in the machine? If possible try to allocate more
memory for MySQL.
One thing we are playing with.
innodb_additional_mem_pool___size = 20M
# Set .._log_file_size to 25 % of buffer pool size
innodb_log_file_size=100M
innodb_log_buffer_size=8M
innodb_flush_log_at_trx___commit=1
This can be a performance killer, try to set it to 0 and make sure you
understand what it means
(http://dev.mysql.com/doc/refman/5.1/en/innodb-parameters.html#sysvar_innodb_flush_log_at_trx_commit)
Interesting, thanks for the reference/
innodb_lock_wait_timeout=50
innodb=on
Do you have innodb_file_per_table enabled?
Yes, we do.
Cheers,
Manuel
Thanks!
--
Andy Wallace
iHOUSEweb, Inc.
awall...@ihouseweb.com
(866) 645-7700 ext 219
--
"Sometimes it pays to stay in bed on Monday, rather than spending the rest of the
week debugging Monday's code."
- Christopher Thompson
--
MySQL General Mailing List
For list archives: http://lists.mysql.com/mysql
To unsubscribe: http://lists.mysql.com/mysql