Реклама на сайте Advertise with us

MySQL скорость: help

Расширенный поиск по форуму
 
Новая тема Новая тема   
Автор
Поиск в теме:



С нами с 25.08.05
Сообщения: 313
Рейтинг: 231

Ссылка на сообщениеДобавлено: 12/09/06 в 14:51       Ответить с цитатойцитата 

привет
есть проблема...

PHP скрипт: 1 коннект и 5 запросов к MySQL 4.1.21 базе (2 Select и 3 Insert);
примерно 10к запросов в час на этот скрипт;
как результат 100% загрузка проца и разростание свопа до безобразия, иногда падение базы;

сервер P4 3.0, 1Gb, SCSI
с базой соединяюсь через mysql_connect

вот скажите, в чем глюк?
что нужно оптимизировать?

0
 

Гражданин планеты Земля

С нами с 30.03.03
Сообщения: 7217
Рейтинг: 2185

Ссылка на сообщениеДобавлено: 12/09/06 в 14:57       Ответить с цитатойцитата 

Ну имхо без структуры таблиц, кол-ва записей и алгоритмов запросов. Наверно мало что можно сказать.

Гыыы

0
 



С нами с 19.11.03
Сообщения: 3973
Рейтинг: 2362

Ссылка на сообщениеДобавлено: 12/09/06 в 18:02       Ответить с цитатойцитата 

Структуру базы , запросы в студию ,конфиг мускуля, ясновидящие все в отпуске....

0
 



С нами с 25.08.05
Сообщения: 313
Рейтинг: 231

Ссылка на сообщениеДобавлено: 12/09/06 в 18:06       Ответить с цитатойцитата 

переписал скрипт... сча тестирую...
если опять такая ерунда... тогда выложу все в студию...

Оффтопик: мама, чому я не программер icon_smile.gif

0
 

БешаныйСуслег

С нами с 16.06.04
Сообщения: 1322
Рейтинг: 1338

Ссылка на сообщениеДобавлено: 12/09/06 в 19:12       Ответить с цитатойцитата 

Специально посмотрел -- 88.62 запросов в секунду на одном из моих серверов. Так что что-то у тебя с запросами... Сколько записей в таблице?

3
 



С нами с 25.08.05
Сообщения: 313
Рейтинг: 231

Ссылка на сообщениеДобавлено: 12/09/06 в 21:15       Ответить с цитатойцитата 


несколько сотен тыс в сутки добавляется

Select по 2м полям VARCHAR(255)
походу именно этот элемент грузил сильно...
отключил временно > нагрузка ноль )

индекс по ним Fulltext ставить? или как? если нужно полно совпадание фразы...

Insert Не надо ведь никак оптимизировать? или я не прав?

0
 



С нами с 16.06.03
Сообщения: 192
Рейтинг: 126

Ссылка на сообщениеДобавлено: 12/09/06 в 21:30       Ответить с цитатойцитата 

keenza писал:
несколько сотен тыс в сутки добавляется


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

keenza писал:

Select по 2м полям VARCHAR(255)

Селект по стрингам самый сложный для мускула.
1. сделай analize он тебе посоветует в соотвествии с данными - какой тип поля поставить.
2. индекс по ним Fulltext ставить - лично я не советую. Хотя это поможет. Лучше переделать структуру при которой у тебя есть необходимость делать такой запрос.

keenza писал:

Insert Не надо ведь никак оптимизировать? или я не прав?

Всегда есть, что оптимизировать. Например если инсерт не критичен можно рассмотреть Delayed Insert

keenza писал:

или как? если нужно полно совпадание фразы...

Надеюсь ты не делаешь: SELECT FROM table WHERE field LIKE '%myquery%' ???

бабло на тинах, 1:220 с сиджа

3
 



С нами с 25.08.05
Сообщения: 313
Рейтинг: 231

Ссылка на сообщениеДобавлено: 12/09/06 в 22:00       Ответить с цитатойцитата 

Crusader писал:
програмера решению которого в базу добавляется сотни тысяч записей в сутки - можно смело расстреливать.

сколько трафа столько и записей, не больше не меньше..
да и не программер я ), а отдать такой скрипт в руки программера мне не хочется icon_wink.gif , да и цену за него мне заломили больше 5к
Crusader писал:
Селект по стрингам самый сложный для мускула.
1. сделай analize он тебе посоветует в соотвествии с данными - какой тип поля поставить.
2. индекс по ним Fulltext ставить - лично я не советую. Хотя это поможет. Лучше переделать структуру при которой у тебя есть необходимость делать такой запрос.

без селекта по стринговым полям никак, вот и мучаюсь
Crusader писал:

Всегда есть, что оптимизировать. Например если инсерт не критичен можно рассмотреть Delayed Insert

ок, попробуем icon_smile.gif
Crusader писал:

Надеюсь ты не делаешь: SELECT FROM table WHERE field LIKE '%myquery%' ???

нет, делаю через =

Вопрос
в одно поле записыватеся IP, тип данных: varchar(15) индекс FULLTEXT
есть смысл менять на какой другой тип?

спасибо, за советы! жду еще icon_redface.gif

0
 



С нами с 18.01.06
Сообщения: 322
Рейтинг: 487

Ссылка на сообщениеДобавлено: 13/09/06 в 00:19       Ответить с цитатойцитата 

keenza писал:

Вопрос
в одно поле записыватеся IP, тип данных: varchar(15) индекс FULLTEXT
есть смысл менять на какой другой тип?
спасибо, за советы! жду еще icon_redface.gif

Блина нафига varchar!!!
Быстро избавляйся, юзай тип double, а IP в скрипте переводи функцией ip2long , обратное преобразование с помощью функции long2ip
Varchar это всегда ЗЛО!

3
 



С нами с 16.06.03
Сообщения: 192
Рейтинг: 126

Ссылка на сообщениеДобавлено: 13/09/06 в 00:41       Ответить с цитатойцитата 

да, ip хранить в варчар низя.


keenza писал:
сколько трафа столько и записей, не больше не меньше..

это неправильно. скажем так: сколько индексов (данных которые можно свести к савокупности) - столько и записей.
Например: если ты делаешь репорт, сколько зашло по рефу уников, по уникальному рефу, то за целый день это будет всего одна запись. ХХХ людей, в ХХХ день, по ХХХ рефу.
попробуй темповые таблы поюзать, которые разгребаются раз в час в индексы ( в минимально возможные для тебя савокупности)

бабло на тинах, 1:220 с сиджа

3
 



С нами с 19.11.03
Сообщения: 3973
Рейтинг: 2362

Ссылка на сообщениеДобавлено: 13/09/06 в 10:58       Ответить с цитатойцитата 

Crusader писал:
програмера решению которого в базу добавляется сотни тысяч записей в сутки - можно смело расстреливать.


+1

1)varchar в топку.

2)insert батчем через FILE.

3)Афтор, ты по-русски понимать? icon_smile.gif Без структуры базы и запросов тебе нечем не помогут коих ты досих пор не продемонстрировал.

4)Скрипт который добавляет несколько сотен тысяч записей в базу в сутки можешь смело удалять !

3
 



С нами с 21.06.05
Сообщения: 1788
Рейтинг: 1579

Ссылка на сообщениеДобавлено: 13/09/06 в 12:17       Ответить с цитатойцитата 

Цитата:
сколько трафа столько и записей, не больше не меньше..


почему бы не обрабатывать логи апача?

ВОСТОРГ ЗНАЧИТ BMW

3
 



С нами с 25.08.05
Сообщения: 313
Рейтинг: 231

Ссылка на сообщениеДобавлено: 13/09/06 в 14:34       Ответить с цитатойцитата 

спасибо за дельные советы!!
реально некоторые помогли icon_biggrin.gif

к сожалению не самих скриптов не структуры базы выложить не могу...
используются идеи, которые не подлежат огласке, основанные на долгом собственно и чужом опыте...

но все равно спасибо ребята icon_smile.gif
хоть не на 100%, но кнопка заработала icon_biggrin.gif

0
 

Криптопохуист

С нами с 05.04.03
Сообщения: 17156
Рейтинг: 6019

Ссылка на сообщениеДобавлено: 13/09/06 в 15:19       Ответить с цитатойцитата 

Full text, если я не ошибаюсь, юзается только при full text search, а тебе до него далеко. Создай обычный двойной индекс по этим полям.

1
 



С нами с 25.08.05
Сообщения: 313
Рейтинг: 231

Ссылка на сообщениеДобавлено: 13/09/06 в 16:15       Ответить с цитатойцитата 

proc3nt писал:
Блина нафига varchar!!!
Быстро избавляйся, юзай тип double, а IP в скрипте переводи функцией ip2long , обратное преобразование с помощью функции long2ip
Varchar это всегда ЗЛО!

Код:

string long2ip ( int proper_address )
int ip2long ( string ip_address )

Вопрос:
я не понял зачем double? ip2long Integer возвращает

Цитата:

Full text, если я не ошибаюсь, юзается только при full text search, а тебе до него далеко. Создай обычный двойной индекс по этим полям.

у меня запрос:
Код:

// string1 VARCHAR(255)
// string2 VARCHAR(255)
SELECT string1, string2 FROM table WHERE string1 = 'bla-bla-bla' and string2 = 'bla2-bla2-bla2';

нужно именно полное совпадение строк...
Вопрос-2:
какой все таки индекс использовать?

этот селект грузит сервак больше всего... icon_sad.gif
на инсертах нагрузки нет icon_surprised.gif

0
 

Криптопохуист

С нами с 05.04.03
Сообщения: 17156
Рейтинг: 6019

Ссылка на сообщениеДобавлено: 13/09/06 в 16:32       Ответить с цитатойцитата 

Full text тут вообще не при чем в таком запросе. Делай двойной индекс, говорю:

ALTER TABLE table ADD INDEX idx1 (string1,string2)

и дропни свой фул текстю он без надобности, а сервак грузит на инсертах и апдейтах.

1
 

Криптопохуист

С нами с 05.04.03
Сообщения: 17156
Рейтинг: 6019

Ссылка на сообщениеДобавлено: 13/09/06 в 16:37       Ответить с цитатойцитата 

И вот еще что. Если ты айпи всетаки решил в варчар хранить (извращенец icon_smile.gif ) то нах тебе 255 длина? У айпи макс длинна: "ххх.ххх.ххх.ххх" = 15 символов. Делай varchar(15)

1
 



С нами с 13.08.03
Сообщения: 533
Рейтинг: 481

Ссылка на сообщениеДобавлено: 13/09/06 в 17:44       Ответить с цитатойцитата 



для VARCHAR(), если оно не BINARY - это абсолютно по барабану

1
 

Криптопохуист

С нами с 05.04.03
Сообщения: 17156
Рейтинг: 6019

Ссылка на сообщениеДобавлено: 13/09/06 в 17:51       Ответить с цитатойцитата 

dm писал:
для VARCHAR(), если оно не BINARY - это абсолютно по барабану

Для варчар может и да. А вот для размера и производительности таблицы и индекса - не совсем.

1
 



С нами с 13.08.03
Сообщения: 533
Рейтинг: 481

Ссылка на сообщениеДобавлено: 13/09/06 в 18:00       Ответить с цитатойцитата 

Pentarh писал:
Для варчар может и да. А вот для размера и производительности таблицы и индекса - не совсем.


не, я именно размер и имел ввиду
чтобы не спорить - нашел :
11.4.1 The `CHAR' and `VARCHAR' Types
-------------------------------------
...`VARCHAR' values are stored using only as many
characters as are needed, plus one byte to record the length (two bytes
for columns that are declared with a length longer than 255).

больше 16 байтов не займет, индексы отсюда же пляшут
просто максимальный размер, после которого режется - 15 или 255 без разницы

1
 

Криптопохуист

С нами с 05.04.03
Сообщения: 17156
Рейтинг: 6019

Ссылка на сообщениеДобавлено: 13/09/06 в 18:16       Ответить с цитатойцитата 

Ну хорошо. Зри в корень. Есть у тебя строка с полем варчар 255. Туда ты записал 15 символов. Теперь ты делаешь апдейт и записываешь туда 200 символов.

Вот подумай, сама эта операция как будет выглядеть физически? Если идти по твоему варианту, то мускуль должен вырезать эту строку из файла и вставить новую строку в конец, т.к. новый размер больше старого.

На самом деле, мускуль резервирует для этого поля в файле 255 байт в любом случае. И при апдейте ничего не вырезает.

Получается, если реальная длина не превышает 15 байт, то имеем нехуевый overhead, учитывая что туда пишутся сотни тысяч записей в сутки.

1
 

www.phpdevs.com

С нами с 24.10.02
Сообщения: 16633
Рейтинг: 16105


Передовик Master-X (01.09.2005) Передовик Master-X (16.09.2005) Передовик Master-X (01.10.2005) Передовик Master-X (16.08.2006) Передовик Master-X (16.10.2006) Ветеран трепа Master-X ()
Ссылка на сообщениеДобавлено: 13/09/06 в 18:26       Ответить с цитатойцитата 

Цитата:
На самом деле, мускуль резервирует для этого поля в файле 255 байт в любом случае.

С чего ты взял ? Резервирует вроде 2 (или 4) байта, а там сколько ты будешь использовать уже. Это char() резервирует сразу заявленное число. Иначе смысла от варчара нет.

Пишу на php/mysql/django за вменяемые деньги.
Обращаться в личку.

1
 



С нами с 13.08.03
Сообщения: 533
Рейтинг: 481

Ссылка на сообщениеДобавлено: 13/09/06 в 18:29       Ответить с цитатойцитата 

да не надо по "моему варианту" идти, там от меня ничего не зависит icon_smile.gif
надо доки к мускулю читать просто-напросто..
ну стыдно программеру такое не знать icon_smile.gif

`VARCHAR' and the `BLOB' and `TEXT' types are variable-length types.
For each, the storage requirements depend on the actual length of column
values (represented by L in the preceding table), rather than on the
type's maximum possible size. For example, a `VARCHAR(10)' column can
hold a string with a maximum length of 10. The actual storage required
is the length of the string (L), plus one byte to record the length of
the string. For the string `'abcd'', L is 4 and the storage requirement
is five bytes.

1
 

Криптопохуист

С нами с 05.04.03
Сообщения: 17156
Рейтинг: 6019

Ссылка на сообщениеДобавлено: 13/09/06 в 18:32       Ответить с цитатойцитата 

погоди, может я просто тебя неправильно понял. Ты хочешь сказать что вот эта вот цифра 255 в определении поля varchar вообще ничего не значит?

Конкретнее вопрос. По твоему, не имеет значения, хранить ли айпи в varchar255 или varchar15?

1
 



С нами с 13.08.03
Сообщения: 533
Рейтинг: 481

Ссылка на сообщениеДобавлено: 13/09/06 в 18:49       Ответить с цитатойцитата 

Pentarh писал:
погоди, может я просто тебя неправильно понял. Ты хочешь сказать что вот эта вот цифра 255 в определении поля varchar вообще ничего не значит?

значит
максимальную длину строки, которую можно в этом поле сохранить и ничего более

Pentarh писал:

Конкретнее вопрос. По твоему, не имеет значения, хранить ли айпи в varchar255 или varchar15?

совершенно верно, никакой разницы
ни для размера базы, ни для индексов - в любом случае 16 байт максимум

каюсь, сам я делаю BINARY VARCHAR(15) для IP
15 - чисто психологически icon_smile.gif
VARCHAR - потому что именно текстовый поиск нужен почти всегда
BINARY - без case conversion и без учета кодировок, ни к чему тут

1
 
Новая тема Новая тема   

Текстовая реклама в форме ответа
Заголовок и до четырех строчек текста
Длина текста до 350 символов
Купить рекламу в этом месте!


Перейти:  



Спонсор раздела Стань спонсором этого раздела!

Реклама на сайте Advertise with us

Опросы

Рецепт новогоднего блюда 2022



Обсудите на форуме обсудить (11)
все опросы »