MySQL Forums
Forum List  »  Performance

MySql 4.1 optimization search poor performance
Posted by: dimitar nenchev
Date: May 04, 2009 10:20AM

Hi
I am using Mysql 4.1 on
CPU 2 Xeon 3.0 Ghz + 2 Virtual (Hyperthreads) (I think it is not using the 2nd processor)
Memory 4GB
I think that the read from the HDD is 50mb per 1 sec, but I am not sure.

I have very big problem with performance, because there are very bad search queries, but even worse after I tuned some of the mysql system variables


There are 2 main tables(MyIsam) that are in many to many table relation ship


3 million records up to now, the table has about 35 well typed columns.

tbl_items 0 PRIMARY 1 item_id A 2594514 \N \N BTREE
tbl_items 1 type_id 1 type_id A 2 \N \N BTREE
tbl_items 1 type_id 2 item_rights A 4 \N \N YES BTREE
tbl_items 1 source 1 item_source A 1652 \N \N BTREE
tbl_items 1 date_created 1 date_created A 10174 \N \N BTREE
tbl_items 1 set_id 1 set_id A 96093 \N \N BTREE
tbl_items 1 set_id 2 date_created A 152618 \N \N BTREE
tbl_items 1 simple_search 1 caption \N 1 \N \N YES FULLTEXT
tbl_items 1 simple_search 2 keywords \N 1 \N \N YES FULLTEXT

6 million but it’s has only 3 columnst (twi int(11) and 1 int(2)
The PK is not good it must be of the item_id and category_id columns, I am not responsible for that 

tbl_items_categories 0 PRIMARY 1 id A \N \N \N BTREE
tbl_items_categories 0 PRIMARY 2 item_id A \N \N \N BTREE
tbl_items_categories 0 PRIMARY 3 category_id A 5729087 \N \N BTREE
tbl_items_categories 1 FK_item_category_idx 1 category_id A 63 \N \N BTREE
tbl_items_categories 1 item_id 1 item_id A 5729087 \N \N BTREE

The queries are:

SELECT <SOME FIELDS>
FROM tbl_items i WHERE (MATCH(i.caption, i.keywords) AGAINST ('london' IN BOOLEAN MODE ))
AND (((i.product_id = 4 OR i.product_id2 = 4))) ORDER BY i.date_created DESC LIMIT 0, 24;

SELECT DISTINCT<SOME FIELDS>
FROM tbl_items i, tbl_items_categories icpx
WHERE icpx.item_id = i.item_id AND (MATCH(i.caption, i.keywords) AGAINST ('london' IN BOOLEAN MODE ))
AND (((i.product_id =4 OR i.product_id2 = 4) AND (icpx.category_id = 11)))
ORDER BY i.date_created DESC LIMIT 0, 24;

SELECT DISTINCT<SOME FIELDS>
FROM tbl_items i, tbl_items_categories icpx
WHERE icpx.item_id = i.item_id
AND (((i.product_id =4 OR i.product_id2 = 4) AND (icpx.category_id = 11)))
ORDER BY i.date_created DESC LIMIT 0, 24;


SELECT DISTINCT <SOME FIELDS>
FROM tbl_items i, tbl_items_categories icpx
WHERE icpx.item_id = i.item_id AND (MATCH(i.caption, i.keywords) AGAINST ('london' IN BOOLEAN MODE ))
AND (((i.product_id =6 OR i.product_id2 = 6) AND (icpx.category_id = 83 OR icpx.category_id = 87))
OR ((i.product_id = 5 OR i.product_id2 = 5) AND (icpx.category_id = 24))
OR ((i.product_id = 4 OR i.product_id2 = 4) AND (icpx.category_id = 12)))
ORDER BY i.date_created DESC LIMIT 0, 24;

SELECT DISTINCT <SOME FIELDS>
FROM tbl_items i, tbl_items_categories icpx
WHERE icpx.item_id = i.item_id
AND (((i.product_id =6 OR i.product_id2 = 6) AND (icpx.category_id = 83 OR icpx.category_id = 87))
OR ((i.product_id = 5 OR i.product_id2 = 5) AND (icpx.category_id = 24))
OR ((i.product_id = 4 OR i.product_id2 = 4) AND (icpx.category_id = 12)))
ORDER BY i.date_created DESC LIMIT 0, 24;


I personally don’t like them, because first it can be used unions instead OR.
Also there are many parenthesis ant it will be slow for parsing.
But the worse is that when you are not using keyword(i.e. fulltext search) and the joining with distinct + order by is killing every thing,
I see in the show processlist copy to tmp that takes from 1-3 minutes to execute.

I remove the search without keywords for now and tuned some part of the system variables but copy to tmp appears again.
Also the mysql is 4.1 it cannot use merge indexes, so it uses only fulltext search index, and the ordering becames very slow, even that is the
Bat thing that causes copy to tmp to appear, and when there is no memory it writes to disk ? that tmp table. Also
Mysql 4.1 uses 1 index per query per table that is terrible ?.

I am thinking to remake the queries with unions and to set product_id2 to index with date_created, the same for product_id i.e
Index on iproduct_id, item_datecareted) and the same for the other.

There are some times big slow select, and after it happens write and this blocks all other selects the appear Locked in the show processlist;

Please advice how to optimize this situation, I read that the tmp ordering can be optimized with moving the mysql tmp dir to another fast disck or even ram disc(tmpfs may be?)

Here are the system variables :

back_log 50
basedir /
binlog_cache_size 32768
bulk_insert_buffer_size 8388608
character_set_client utf8
character_set_connection utf8
character_set_database latin1
character_set_results utf8
character_set_server latin1
character_set_system utf8
character_sets_dir /usr/share/mysql/charsets/
collation_connection utf8_general_ci
collation_database latin1_swedish_ci
collation_server latin1_swedish_ci
concurrent_insert ON
connect_timeout 5
datadir /var/lib/mysql/
date_format %Y-%m-%d
datetime_format %Y-%m-%d %H:%i:%s
default_week_format 0
delay_key_write ON
delayed_insert_limit 100
delayed_insert_timeout 300
delayed_queue_size 1000
expire_logs_days 3
flush OFF
flush_time 0
ft_boolean_syntax + -><()~*:""&|
ft_max_word_len 84
ft_min_word_len 3
ft_query_expansion_limit 20
ft_stopword_file (built-in)
group_concat_max_len 1024
have_archive YES
have_bdb NO
have_blackhole_engine NO
have_compress YES
have_crypt YES
have_csv NO
have_example_engine NO
have_geometry YES
have_innodb YES
have_isam NO
have_merge_engine YES
have_ndbcluster NO
have_openssl NO
have_query_cache YES
have_raid NO
have_rtree_keys YES
have_symlink YES
init_connect
init_file
init_slave
innodb_additional_mem_pool_size 1048576
innodb_autoextend_increment 8
innodb_buffer_pool_awe_mem_mb 0
innodb_buffer_pool_size 8388608
innodb_data_file_path ibdata1:10M:autoextend
innodb_data_home_dir
innodb_fast_shutdown ON
innodb_file_io_threads 4
innodb_file_per_table OFF
innodb_flush_log_at_trx_commit 1
innodb_flush_method
innodb_force_recovery 0
innodb_lock_wait_timeout 50
innodb_locks_unsafe_for_binlog OFF
innodb_log_arch_dir
innodb_log_archive OFF
innodb_log_buffer_size 1048576
innodb_log_file_size 5242880
innodb_log_files_in_group 2
innodb_log_group_home_dir ./
innodb_max_dirty_pages_pct 90
innodb_max_purge_lag 0
innodb_mirrored_log_groups 1
innodb_open_files 300
innodb_table_locks ON
innodb_thread_concurrency 8
interactive_timeout 28800
join_buffer_size 4190208
key_buffer_size 1073741824
key_cache_age_threshold 300
key_cache_block_size 1024
key_cache_division_limit 100
language /usr/share/mysql/english/
large_files_support ON
lc_time_names en_US
license GPL
local_infile ON
locked_in_memory OFF
log OFF
log_bin ON
log_error
log_slave_updates OFF
log_slow_queries ON
log_update OFF
log_warnings 1
long_query_time 10
low_priority_updates OFF
lower_case_file_system OFF
lower_case_table_names 0
max_allowed_packet 1047552
max_binlog_cache_size 4294967295
max_binlog_size 1073741824
max_connect_errors 10
max_connections 200
max_delayed_threads 20
max_error_count 64
max_heap_table_size 104856576
max_insert_delayed_threads 20
max_join_size 18446744073709551615
max_length_for_sort_data 1024
max_prepared_stmt_count 16382
max_relay_log_size 0
max_seeks_for_key 4294967295
max_sort_length 1024
max_tmp_tables 90
max_user_connections 0
max_write_lock_count 4294967295
myisam_data_pointer_size 4
myisam_max_extra_sort_file_size 2147483648
myisam_max_sort_file_size 2147483647
myisam_recover_options OFF
myisam_repair_threads 1
myisam_sort_buffer_size 67108864
myisam_stats_method nulls_unequal
net_buffer_length 16384
net_read_timeout 30
net_retry_count 10
net_write_timeout 60
new OFF
old_passwords OFF
open_files_limit 1024
pid_file /var/lib/mysql/localhost.localdomain.pid
port 3306
preload_buffer_size 32768
prepared_stmt_count 0
protocol_version 10
query_alloc_block_size 8192
query_cache_limit 8388608
query_cache_min_res_unit 4096
query_cache_size 33554432
query_cache_type ON
query_cache_wlock_invalidate OFF
query_prealloc_size 8192
range_alloc_block_size 2048
read_buffer_size 2093056
read_only OFF
read_rnd_buffer_size 8384512
relay_log_purge ON
relay_log_space_limit 0
rpl_recovery_rank 0
secure_auth OFF
server_id 1
skip_external_locking ON
skip_networking OFF
skip_show_database OFF
slave_net_timeout 3600
slave_transaction_retries 0
slow_launch_time 2
socket /var/lib/mysql/mysql.sock
sort_buffer_size 4194296
sql_mode
sql_notes ON
sql_warnings ON
storage_engine MyISAM
sync_binlog 1
sync_frm ON
sync_replication 0
sync_replication_slave_id 0
sync_replication_timeout 0
system_time_zone CDT
table_cache 407
table_type MyISAM
thread_cache_size 16
thread_stack 196608
time_format %H:%i:%s
time_zone SYSTEM
tmp_table_size 536870912
tmpdir
transaction_alloc_block_size 8192
transaction_prealloc_size 4096
tx_isolation REPEATABLE-READ
version 4.1.22-standard-log
version_comment MySQL Community Edition - Standard (GPL)
version_compile_machine i686
version_compile_os pc-linux-gnu
wait_timeout 28800


Show status


Aborted_clients 234
Aborted_connects 0
Binlog_cache_disk_use 0
Binlog_cache_use 0
Bytes_received 225606412
Bytes_sent 3005443782
Com_admin_commands 66
Com_alter_db 0
Com_alter_table 0
Com_analyze 0
Com_backup_table 0
Com_begin 1
Com_change_db 183
Com_change_master 0
Com_check 0
Com_checksum 0
Com_commit 0
Com_create_db 0
Com_create_function 0
Com_create_index 0
Com_create_table 0
Com_dealloc_sql 0
Com_delete 1280
Com_delete_multi 3
Com_do 0
Com_drop_db 0
Com_drop_function 0
Com_drop_index 0
Com_drop_table 0
Com_drop_user 0
Com_execute_sql 0
Com_flush 0
Com_grant 0
Com_ha_close 0
Com_ha_open 0
Com_ha_read 0
Com_help 0
Com_insert 32819
Com_insert_select 43
Com_kill 0
Com_load 0
Com_load_master_data 0
Com_load_master_table 0
Com_lock_tables 0
Com_optimize 0
Com_preload_keys 0
Com_prepare_sql 0
Com_purge 0
Com_purge_before_date 0
Com_rename_table 0
Com_repair 0
Com_replace 0
Com_replace_select 0
Com_reset 0
Com_restore_table 0
Com_revoke 0
Com_revoke_all 0
Com_rollback 0
Com_savepoint 0
Com_select 250474
Com_set_option 607
Com_show_binlog_events 0
Com_show_binlogs 0
Com_show_charsets 0
Com_show_collations 158
Com_show_column_types 0
Com_show_create_db 0
Com_show_create_table 308
Com_show_databases 4
Com_show_errors 0
Com_show_fields 145
Com_show_grants 0
Com_show_innodb_status 0
Com_show_keys 45
Com_show_logs 0
Com_show_master_status 0
Com_show_ndb_status 0
Com_show_new_master 0
Com_show_open_tables 0
Com_show_privileges 0
Com_show_processlist 320
Com_show_slave_hosts 1
Com_show_slave_status 0
Com_show_status 1
Com_show_storage_engines 0
Com_show_tables 108
Com_show_variables 173
Com_show_warnings 0
Com_slave_start 0
Com_slave_stop 0
Com_stmt_close 0
Com_stmt_execute 0
Com_stmt_prepare 0
Com_stmt_reset 0
Com_stmt_send_long_data 0
Com_truncate 0
Com_unlock_tables 1
Com_update 78123
Com_update_multi 0
Connections 170
Created_tmp_disk_tables 5454
Created_tmp_files 1010
Created_tmp_tables 22223
Delayed_errors 0
Delayed_insert_threads 0
Delayed_writes 0
Flush_commands 1
Handler_commit 0
Handler_delete 949
Handler_discover 0
Handler_read_first 1599
Handler_read_key 355904561
Handler_read_next 1142413734
Handler_read_prev 363834
Handler_read_rnd 7371541
Handler_read_rnd_next 587538060
Handler_rollback 161
Handler_update 20384
Handler_write 50259202
Key_blocks_not_flushed 47435
Key_blocks_unused 220362
Key_blocks_used 708736
Key_read_requests 3885623178
Key_reads 1106287
Key_write_requests 50896389
Key_writes 643557
Max_used_connections 39
Not_flushed_delayed_rows 0
Open_files 196
Open_streams 0
Open_tables 232
Opened_tables 238
Qcache_free_blocks 204
Qcache_free_memory 28672400
Qcache_hits 857901
Qcache_inserts 249443
Qcache_lowmem_prunes 63919
Qcache_not_cached 1030
Qcache_queries_in_cache 878
Qcache_total_blocks 2280
Questions 1222721
Rpl_status NULL
Select_full_join 155
Select_full_range_join 0
Select_range 14658
Select_range_check 0
Select_scan 3788
Slave_open_temp_tables 0
Slave_retried_transactions 0
Slave_running OFF
Slow_launch_threads 0
Slow_queries 4143
Sort_merge_passes 503
Sort_range 41071
Sort_rows 7353497
Sort_scan 5967
Table_locks_immediate 458067
Table_locks_waited 850
Threads_cached 14
Threads_connected 17
Threads_created 70
Threads_running 2
Uptime 444983

Options: ReplyQuote




Sorry, you can't reply to this topic. It has been closed.

Content reproduced on this site is the property of the respective copyright holders. It is not reviewed in advance by Oracle and does not necessarily represent the opinion of Oracle or any other party.