Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Быстродействие поиска в Mysql
 
 автор: SergeZ   (04.04.2006 в 19:58)   письмо автору
 
 

Вот такая проблема: Есть таблица u48 примерно на 60-70 тыс записей.

Есть текстовое поле 'tovar' char 255

Выполняю запрос примерно такой:
SELECT id_tov, tovar
FROM u48
WHERE u48.tovar LIKE '%SVEN%'
AND u48.tovar LIKE '%Power%'
AND u48.tovar LIKE '%Pro%'
AND u48.tovar LIKE '%800%'

Если сервер и Mysql только что запущен, запрос выполняется меньше секунды.
По прошествию какого-то времени - несколько часов, время выполнения запроса становится все больше и больше и доходит до 5-8 секунд. Где , какие настройки Mysql нужно смотреть, подскажите ?

   
 
 автор: cheops   (04.04.2006 в 22:13)   письмо автору
 
   для: SergeZ   (04.04.2006 в 19:58)
 

Хм... подозрительно... поле tovar индексировано? Вообще всё должно быть с точностью до наборот - чем интенсивнее используется таблица, тем быстрее должно быстрее работать...

   
 
 автор: SergeZ   (04.04.2006 в 22:46)   письмо автору
 
   для: cheops   (04.04.2006 в 22:13)
 

Поле не индексировано. Но я пробовал и с индексами - картина та же самая. Спустя несколько часов быстродействие постепенно замедляется.
А какие меры можно принять для самоочистки базы данных - осовбожддение неиспользуемрй памяти , или что то в этом роде. Такое впечатление - что причина именно в том, что база начинает постепенно работать все медленнее и медленнее, пока не протизведешь полный сброс и перегрузку компа на котором все это крутится.

   
 
 автор: cheops   (04.04.2006 в 23:07)   письмо автору
 
   для: SergeZ   (04.04.2006 в 22:46)
 

Нужно больше подробностей - где стоит сервер, какие операции выполняет - что больше SELECT или обновления таблиц, сколько памяти на что выделяли в конфигурационных файлах, сколько можно откусить оперативном памяти на сервере и какие ещё поля в таблице имеются? Поиск какждый раз производится по разным ключевым словам или они время от времени повторяются? Сколько мегабайт занимает таблица на диске? Какая версия MySQL используется?

   
 
 автор: SergeZ   (04.04.2006 в 23:43)   письмо автору
 
   для: cheops   (04.04.2006 в 23:07)
 


Нужно больше подробностей -

1) где стоит сервер


Сервер имеет примерно такую конфигурацию

Операционка - Mandrake Linux 10.0 Выделенный сервер на P4 -3000 память 512

2) какие операции выполняет - что больше SELECT или обновления таблиц

Картина примерно такая - данные за 20-21 час работы

change db 258,104 2,470.18 9.46 %
insert 948,945 9,081.88 34.78 %
select 619,697 5,930.81 22.71 %
update 792,813 7,587.61 29.06 %
остальное - мелочи

Другие статусные переменные
Переменная Значение
Created tmp disk tables 47658
Created tmp tables 97144
Created tmp files 10
Delayed insert threads 0
Delayed writes 0
Delayed errors 0
Flush commands 1
Handler commit 0
Handler delete 667119
Handler read first 41758
Handler read key 5419250
Handler read next 169972012
Handler read prev 15323
Handler read rnd 3449815
Handler read rnd next 4163084565
Handler rollback 0
Handler update 3029934
Handler write 6367714
Key blocks used 7793
Key read requests 42688674
Переменная Значение
Key reads 285155
Key write requests 8810492
Key writes 2811246
Max used connections 76
Not flushed key blocks 0
Not flushed delayed rows 0
Open tables 64
Open files 126
Open streams 0
Opened tables 2472
Qcache queries in cache 0
Qcache inserts 0
Qcache hits 0
Qcache lowmem prunes 0
Qcache not cached 0
Qcache free memory 0
Qcache free blocks 0
Qcache total blocks 0
Rpl status NULL
Переменная Значение
Select full join 97590
Select full range join 0
Select range 4485
Select range check 0
Select scan 334376
Slave open temp tables 0
Slave running OFF
Slow launch threads 3
Slow queries 1658
Sort merge passes 5
Sort range 7112
Sort rows 3411308
Sort scan 133404
Table locks immediate 2546426
Table locks waited 7017
Threads cached 0
Threads created 260571
Threads connected 10
Threads running 2



3) сколько памяти на что выделяли в конфигурационных файлах.

Настройки все стандартные ничего не менялось:

+---------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Variable_name | Value |
+---------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| back_log | 50 |
| basedir | / |
| binlog_cache_size | 32768 |
| bulk_insert_buffer_size | 8388608 |
| character_set | latin1 |
| character_sets | latin1 big5 czech euc_kr gb2312 gbk latin1_de sjis tis620 ujis dec8 dos german1 hp8 koi8_ru latin2 swe7 usa7 cp1251 danish hebrew win1251 estonia hungarian koi8_ukr win1251ukr greek win1250 croat cp1257 latin5 |
| concurrent_insert | ON |
| connect_timeout | 5 |
| convert_character_set | |
| datadir | /var/lib/mysql/ |
| default_week_format | 0 |
| delay_key_write | ON |
| delayed_insert_limit | 100 |
| delayed_insert_timeout | 300 |
| delayed_queue_size | 1000 |
| flush | OFF |
| flush_time | 0 |
| ft_boolean_syntax | + -><()~*:""&| |
| ft_min_word_len | 4 |
| ft_max_word_len | 254 |
| ft_max_word_len_for_sort | 20 |
| ft_stopword_file | (built-in) |
| have_bdb | NO |
| have_crypt | YES |
| have_innodb | YES |
| have_isam | YES |
| have_raid | NO |
| have_symlink | YES |
| have_openssl | NO |
| have_query_cache | YES |
| init_file | |
| innodb_additional_mem_pool_size | 1048576 |
| innodb_buffer_pool_size | 8388608 |
| innodb_data_file_path | ibdata1:10M:autoextend |
| innodb_data_home_dir | |
| innodb_file_io_threads | 4 |
| innodb_force_recovery | 0 |
| innodb_thread_concurrency | 8 |
| innodb_flush_log_at_trx_commit | 1 |
| innodb_fast_shutdown | ON |
| innodb_flush_method | |
| innodb_lock_wait_timeout | 50 |
| 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_mirrored_log_groups | 1 |
| innodb_max_dirty_pages_pct | 90 |
| interactive_timeout | 28800 |
| join_buffer_size | 131072 |
| key_buffer_size | 8388600 |
| language | /usr/share/mysql/english/ |
| large_files_support | ON |
| local_infile | ON |
| locked_in_memory | OFF |
| log | OFF |
| log_update | OFF |
| log_bin | OFF |
| log_slave_updates | OFF |
| log_slow_queries | OFF |
| log_warnings | OFF |
| long_query_time | 10 |
| low_priority_updates | OFF |
| lower_case_table_names | 0 |
| max_allowed_packet | 1048576 |
| max_binlog_cache_size | 4294967295 |
| max_binlog_size | 1073741824 |
| max_connections | 100 |
| max_connect_errors | 10 |
| max_delayed_threads | 20 |
| max_heap_table_size | 16777216 |
| max_join_size | 4294967295 |
| max_relay_log_size | 0 |
| max_seeks_for_key | 4294967295 |
| max_sort_length | 1024 |
| max_user_connections | 0 |
| max_tmp_tables | 32 |
| max_write_lock_count | 4294967295 |
| myisam_max_extra_sort_file_size | 268435456 |
| myisam_max_sort_file_size | 2147483647 |
| myisam_repair_threads | 1 |
| myisam_recover_options | OFF |
| myisam_sort_buffer_size | 8388608 |
| net_buffer_length | 16384 |
| net_read_timeout | 30 |
| net_retry_count | 10 |
| net_write_timeout | 60 |
| new | OFF |
| open_files_limit | 1024 |
| pid_file | /var/lib/mysql/scorpio.master-it.ru.pid |
| log_error | |
| port | 3306 |
| protocol_version | 10 |
| query_alloc_block_size | 8192 |
| query_cache_limit | 1048576 |
| query_cache_size | 0 |
| query_cache_type | ON |
| query_prealloc_size | 8192 |
| range_alloc_block_size | 2048 |
| read_buffer_size | 131072 |
| read_only | OFF |
| read_rnd_buffer_size | 262144 |
| rpl_recovery_rank | 0 |
| server_id | 0 |
| slave_net_timeout | 3600 |
| skip_external_locking | ON |
| skip_networking | OFF |
| skip_show_database | OFF |
| slow_launch_time | 2 |
| socket | /var/lib/mysql/mysql.sock |
| sort_buffer_size | 2097144 |
| sql_mode | 0 |
| table_cache | 64 |
| table_type | MYISAM |
| thread_cache_size | 0 |
| thread_stack | 196608 |
| tx_isolation | REPEATABLE-READ |
| timezone | MSD |
| tmp_table_size | 33554432 |
| tmpdir | /tmp/ |
| transaction_alloc_block_size | 8192 |
| transaction_prealloc_size | 4096 |
| version | 4.0.18 |
| version_comment | Source distribution |
| wait_timeout | 28800

4) сколько можно откусить оперативном памяти на сервере и какие ещё поля в таблице имеются

Сколько надо столько и откусим - надо будет увеличим память до 1Gb



5)Поиск какждый раз производится по разным ключевым словам или они время от времени повторяются

Слова конечно каждый раз - разные и могут быть любыми, в среднем примерно от 3 до 7 слов при поиске - в одном запросе

6)Сколько мегабайт занимает таблица на диске?

Используемое пространство:
Тип Использование
Данные 15,212 KB
Индекс 2,620 KB
Всего 17,832 KB


7) Какая версия MySQL используется?

MySQL 4.0.18

   
 
 автор: cheops   (05.04.2006 в 13:53)   письмо автору
 
   для: SergeZ   (04.04.2006 в 23:43)
 

А не слабо у вас данные обновляются (у вас какой диск используется (железо имеется ввиду)?)... В таблице много полей? я гляжу индексы используются - их много? Тип таблицы какой InnoDB или MyISAM?
Попробуйте для начала выставить в конфигурационном файле my.cnf в секции [mysqld] следующие параметры
key_buffer_size = 256M
max_allowed_packet = 8M
table_cache = 512 # число одновременных соединений*число открытых таблиц
sort_buffer_size = 16M  
read_buffer_size = 1M  
join_buffer_size = 1M 
query_cache_size = 64M
query_cache_limit = 2M
myisam_sort_buffer_size = 64M
thread_cache = 8
tmp_table_size = 64M

PS А таблица из себя что представляет? Там все записи подвергаются обновлению или часть можно сбросить в архив? У нас на форуме около 90000 сообщений, объём которых раза в три первышают вашу таблицу - мы решали увеличение времени добавления нового ответа путём разбиения таблицы на две - живой форум и архив, у вас так нельзя поступить?

   
 
 автор: SergeZ   (05.04.2006 в 17:16)   письмо автору
 
   для: cheops   (05.04.2006 в 13:53)
 

Хотел было изменить некотрые перменные, но вот столкнулся с тем, что нет у меня файла my.cnf - вообще его нет нигде. И поэтому никак не изменить переменные в Mysql. Как это делать?

   
 
 автор: SergeZ   (05.04.2006 в 17:39)   письмо автору
 
   для: SergeZ   (05.04.2006 в 17:16)
 

Разобрался. Просто создал его в нужном каталоге. Сейчас буду разбираться с перменными

   
 
 автор: cheops   (05.04.2006 в 23:11)   письмо автору
 
   для: SergeZ   (05.04.2006 в 17:16)
 

my.ini ещё можно использоваться, но его обычно на Linux не жалуют...

   
 
 автор: cheops   (05.04.2006 в 13:56)   письмо автору
 
   для: SergeZ   (04.04.2006 в 23:43)
 

Да, если есть возможность посмотрите, во время торможения - MySQL процессор жрёт или диск теребит?

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования