Задавайте вопросы, мы ответим
Вы не зашли.
Вот спустя некоторое время, написал конфиг, посмотрите пожалуйста и скажите что не так и что можно было бы еще подправить?
[mysqld] local-infile=0 init-connect='set NAMES cp1251' default-character-set=cp1251 character-set-server=cp1251 datadir=/var/db/mysql skip-locking #skip-innodb #skip-networking max_connections=320 max_user_connections=200 back_log=120 query_cache_limit=1M query_cache_size=64M query_cache_type=1 key_buffer_size=128M max_allowed_packet=16M table_cache=256 record_buffer=1M interactive_timeout=10 wait_timeout=20 thread_cache_size=128 connect_timeout=20 join_buffer_size=4M max_connect_errors=20 sort_buffer_size=2M read_buffer_size=2M read_rnd_buffer_size=1M thread_concurrency=2 myisam_sort_buffer_size=64M server-id=1 thread_cache_size=8 log_slow_queries long_query_time=1 max_tmp_tables=128 max_heap_table_size=32M innodb_buffer_pool_size=64M [myisamchk] key_buffer=64M sort_buffer=64M read_buffer=16M write_buffer=16M [mysqldump] quick max_allowed_packet=16M [mysqlhotcopy] interactive-timeout
Спасибо!
Отредактированно 0lik.ru (13.01.2008 01:16:03)
Неактивен
Чтобы оптимизировать производительность, необходимо найти узкие места. Абстрактно невозможно сказать, какие должны быть значения, скажем innodb_buffer_pool_size, не зная о конкретном применении. Включите log-slow-queries и посмотрите какие именно запросы выполняются медленно. Может быть дело в отсутствии ключей на определенных таблицах или в неоптимальных запросах.
Неактивен
thread_cache_size 2 раза написан
Использовать чужие конфиги хорошо, но есть смысл действительно
искать узкие места и их исправлять.
Неактивен
Вот смотрю на ...slow.log, только мне мало что там говорит.
На что нужно обратить внимание?
К примеру кусок.. (частично заменил слова в названиях баз и таблиц)
# Time: 080113 1:44:57 # User@Host: имя-базы[имя-базы] @ localhost [] # Query_time: 2 Lock_time: 0 Rows_sent: 19 Rows_examined: 533810 use имя-базы; SELECT p.*, u.* FROM префикс_таблицы_posts AS p LEFT JOIN префикс_таблицы_users AS u ON p.post_author=u.name WHERE p.topic_id = '8' ORDER by pid LIMIT 0,20;
Что можете подсказать?
Спасибо
Неактивен
Rows_examined: 533810
Full table Scan? Ключик на (topic_id, pid) спасет.
Неактивен
Ключик на (topic_id, pid) спасет
Уважаемый, объясните пожалуйста как его ставить? Я немного знаю, читал где-то, но что бы точно убедиться что это то что надо.
Спасибо.
Вот посмотрите, для PID как я понимаю ключ уже стоит:
http://0lik.ru/files/pid.gif
Отредактированно 0lik.ru (15.01.2008 11:20:39)
Неактивен
500 тысяч строк - это может быть и full join. Вообще говоря, чтобы не испытывать способности оракулов, приведите результат
EXPLAIN далее_запрос_полностью;
и аналагичную структуру таблицы users
Исходя из того, что есть, я бы добавил:
ALTER TABLE префикс_posts ADD KEY(topic_id, pid);
ALTER TABLE префикс_users ADD KEY(name); // если так он не стоит
Посмотрите EXPLAIN после добавления ключей.
Неактивен
rgbeast, а посмотрите в предыдущем моём сообщении скрин шот, там уже стоит ключ на pid, и если добавляю еще один внизу появляется надпись что нельзя их использовать вместе. Нужно добавлять pid или оставить? Или удалить тот который Primary ?
Спасибо
Неактивен
попробуйте именно эту команду, и скажите, что она выдает
ALTER TABLE префикс_posts ADD KEY(topic_id, pid);
primary удалять не надо, здесь речь о создании составного ключа
Неактивен
rgbeast, а именно эта команда дает следующее:
http://0lik.ru/files/toppid.gif
получается добавляется одна строка с двойным полем.
Неактивен
Так и должно быть. Ваш запрос должен перестать быть медленным. Посмотрите
EXPLAIN медленный_запрос
Неактивен
Вот что вывел EXPLAIN:
http://0lik.ru/files/explain.gif
Неактивен
Не очень хорошо, во второй таблице не используется ключ на Name. Что говорит SHOW CREATE TABLE на users ?
Неактивен
Выдает такое:
http://0lik.ru/files/show.gif
но что то здесь как то обрублено помоему?
Неактивен
0lik.ru написал:
но что то здесь как то обрублено помоему?
Нажмите правой кнопкой на слова "create table" и выберете что-то типа "save field content"
Было бы удобно, если Вы это писали текстом здесь, а не давали ссылку на рисунок.
Неактивен
Нажмите правой кнопкой на слова "create table" и выберете что-то типа "save field content"
Что то я такого не нашел. А попробывал нажать на кнопочку и отвалился Apache!!
Неактивен
0lik.ru написал:
Нажмите правой кнопкой на слова "create table" и выберете что-то типа "save field content"
Что то я такого не нашел. А попробывал нажать на кнопочку http://0lik.ru/files/1.GIF и отвалился Apache!!
Нажать нужно не на заголовок, а на вывод результата, т.е. "create table `users` ( ..." Во всплывшем окне должна быть возможность сохранить результат.
Как вариант (независимо от менеджера БД), Вы всегда можете поместить курсор в начало вывода и удерживая "Shift" перемещать его вправо до упора. Затем скопировать в буфер обмена выделенный текст.
Неактивен
vasya, нашел другим способом.
На что там надо обратить внимание?
Вот что там:
CREATE TABLE `префикс_users` (\n `email` varchar(50) NOT NULL default '',\n `password` varchar(32) NOT NULL default '',\n `name` varchar(40) NOT NULL default '',\n `user_id` mediumint(8) NOT NULL auto_increment,\n `news_num` smallint(6) NOT NULL default '0',\n `comm_num` mediumint(8) NOT NULL default '0',\n `user_group` smallint(5) NOT NULL default '4',\n `lastdate` varchar(20) default NULL,\n `reg_date` varchar(20) default NULL,\n `banned` varchar(5) NOT NULL default '',\n `allow_mail` tinyint(1) NOT NULL default '1',\n `info` text NOT NULL,\n `signature` text NOT NULL,\n `foto` varchar(30) NOT NULL default '',\n `fullname` varchar(100) NOT NULL default '',\n `land` varchar(100) NOT NULL default '',\n `icq` varchar(20) NOT NULL default '',\n `favorites` text NOT NULL,\n `pm_all` smallint(5) NOT NULL default '0',\n `pm_unread` smallint(5) NOT NULL default '0',\n `time_limit` varchar(20) NOT NULL default '',\n `xfields` text NOT NULL,\n `allowed_ip` varchar(16) NOT NULL default '',\n `hash` varchar(32) NOT NULL default '',\n `logged_ip` varchar(16) NOT NULL default '',\n `subscription` text NOT NULL,\n `forum_post` smallint(6) NOT NULL default '0',\n `forum_warn` smallint(5) NOT NULL default '0',\n `forum_update` varchar(20) NOT NULL,\n `forum_rank` varchar(40) NOT NULL,\n PRIMARY KEY (`user_id`),\n UNIQUE KEY `name` (`name`),\n UNIQUE KEY `email` (`email`)\n) ENGINE=MyISAM AUTO_INCREMENT=33636 DEFAULT CHARSET=cp1251
Отредактированно 0lik.ru (27.01.2008 00:03:39)
Неактивен
Странно, что ключ на name не используется. Тогда уж приведите структуру второй таблицы и запрос полностью, чтобы повторить можно было.
Неактивен
Возникла интересная мысль. А что если там на системе стоит что-то совершенно
неудобоваримое, о чем 0lik.ru умалчивает? \n выдает вместо переноса каретки...
Неактивен
rgbeast, второй имеется виду какой?
paulus, не совсем понял ваши мысли...
Неактивен
запрос к двум таблицам, вторая posts. Если Вы выложите show create table второй, и полностью запрос, мы сможем попробовать повторить опыт и посмотреть explain.
Неактивен