Dimanych

Рейтинг
155
Регистрация
05.06.2007
Shirase:
apache mpm itk - очень хороший вариант, уже больше года на нескольких серверах работает, правда пришлось пошаманить, чтобы заставить на нем Zend работать

И его последователь mpm peruser есть, наслышан, что там там куча багов на разных OS, да и работает ли с последним апачем? (баги вплоть до порождения огромного числа процессов и зависания OS)

правда пришлось пошаманить

особенно этот факт беспокоит, сколько и как шаманить прийдётся чтобы до ума довести 🙄

Вот видите, у вас 90мб, у меня 2 .. (сколько же коннектов допускаете, если каждый уже способен взять по 90мб) с сортировкой вся понятно ;)

using temporary - скорее всего тоже какой то лимит буфера нужно подкрутить..

Говорите ничего не меняется, появился using where для f, и кто знает какое время выполнения скрипта будет...

Shirase:
права нужно правильно настроить
например чтобы папки пользователей не отображались нужно на директорию home поставить права 0711

Нормальный вариант, только не 0711, а 0710

1 для группы, а в группе у нас апач, если он не от юзера запускается ☝

PS. жаль никто не поделится секретом как апач от юзера пускать с производительностью как у mod_php

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

для файловой системы вообще не существует никаких папок - у нее все в корне диска лежит
а папки - это привет из таблицы раздела - просто запись в таблице

Говорилось что лучше делить по 10тыс файлов на папку.

Мне интересно как система преобразует path в указатель к файлу на жёстком диске.

Скажем есть у нас /home/page/index.html

Я думал что делается запрос на папку /home/page/ по названию файла и получается указатель на этот фаил..

И ещё, например есть у нас папка в которой 1млн файлов, размер этой директории будет десятки мб, наврятли удастся её отрыть через что либо + к тому же если произойдёт ошибка в списке файлов директории, то несколько файлов при чтении директории могут пропасть , сами файлы конечно же не будут повреждены. (просто был уже случай что в фтп обычный файл не отображался а для чтения он был доступен)

а если из order by убрать только desc, сортировка исчезнет?

нет.. я думаю тут дело именно в параметре sort buffer size=2M , но больше ставить вроде ни где не рекомендуют... просто ограничиваю при выборе базу оценок id<40000 и filesort пропадает... (мой Индекс 2,149.0 КБ )

какой у вас и какие параметры для sort buffer size / myisam sort buffer size

having: мой запрос видимо для mysql очень похож на группировку по n.foto=f.id (ведь несколько оценок для одной фотки)

если не использовать having то как не крути будет using temporary для n + where для f (соответственно долгое выполнение)

Почему у вас такого нет?

Очень просто, у вас условия только для одной таблицы, поставьте дополнительное условие для f как у меня (f.ok=1 and f.view=0 and f.ero=0), достаточно одного параметра на который нет индекса и всё переворачивается вверх дном ..

В принцепи я во всём разобрался, но ещё хотелось бы услышать что у вас получится после подстановки этого доп. условия для f.

netwind, сделал запрос идентичный вашему, всё равно для f => Using temporary; Using filesort

И хочу уточнить, у меня другой запрос, у вас не хватает where для таблицы f

Это у вас

where f.id=n.photo and n.rating=10.0 and n.approved=1

тут участвует только индекс от f.id и таблица n

Это мой

where f.id=n.foto and n.note=10 and f.ok=1 and f.view=0 and f.ero=0

тут участвуют обе таблицы, это и приводит у такому времени запроса 0.7 сек

Кстати что за феномен, убираю "order by n.id desc"

сразу пропадает Using temporary; Using filesort для f

У меня сервер... с оптимизацией самого mysql не заморачивался.. так как пока не прижало ))

Всё по умолчанию, ничего не менял

#
# * Fine Tuning
#
key_buffer = 16M
max_allowed_packet = 16M
thread_stack = 128K
thread_cache_size = 8
max_connections = 100
table_cache = 64
thread_concurrency = 10

join buffer size 131,072

sort buffer size 2,097,144

из переменных mysql

Нет, не погрешность кеширования, не 1 раз проверял..

Хотите попробовать, вот таблички, но их нужно забить чем то:

CREATE TABLE IF NOT EXISTS `tb_fotos` (
`id` int(10) NOT NULL auto_increment,
`user` int(10) NOT NULL default '0',
`album` int(10) NOT NULL default '0',
`date` int(10) NOT NULL default '0',
`changed` int(10) NOT NULL default '0',
`comment` varchar(100) NOT NULL default '',
`comments` int(10) NOT NULL default '0',
`notec` int(10) NOT NULL default '0',
`noted` int(10) NOT NULL default '0',
`ero` tinyint(1) NOT NULL default '0',
`view` tinyint(1) NOT NULL default '0',
`ok` tinyint(1) NOT NULL default '0',
PRIMARY KEY (`id`),
KEY `user` (`user`)
) ENGINE=MyISAM DEFAULT CHARSET=cp1251 AUTO_INCREMENT=17884 ;



CREATE TABLE IF NOT EXISTS `tb_notes` (
`id` int(10) NOT NULL auto_increment,
`user` int(10) NOT NULL default '0',
`touser` int(10) NOT NULL default '0',
`foto` int(10) NOT NULL default '0',
`date` int(10) NOT NULL default '0',
`note` tinyint(4) NOT NULL default '0',
PRIMARY KEY (`id`),
KEY `foto` (`foto`)
) ENGINE=MyISAM DEFAULT CHARSET=cp1251 AUTO_INCREMENT=105648 ;

Сколько они занимают у меня

tb_notes 85,712 записей MyISAM cp1251_general_ci 3.9 МБ

tb_fotos 12,654 записей MyISAM cp1251_general_ci 1.0 МБ

в тот раз что то я напутал на счёт того что 20к оценок, оказывается 85к )

RAS,

я описывал структуру чуть ранее, индексы только на (id,foto - таблица n) и на (id,user - таблица f), другие индексы нехочу прописывать так как это становится не целесообразно.

Это единственный такой замороченный запрос, другие в основном по индексам и с одной таблицей..

netwind,

Как это left убрать. Ну убрал я его и получилось что и с having и без него теперь более 0.7сек..

Изменилась эта строчка для таблицы n: [Extra] => Using temporary; Using filesort (пропал where)

Скорее всего в моём случае тройной индекс ускорит запрос, но этот индекс мне потом только боком выйдет.. так как таблицы очень динамические.. и растут довольно таки быстро, нужно экономить используя только основные индексы, а не ставить их на все данные таблицы)

Всё таки оптимизация запросов не лёгкая задача ;)

netwind:
это сейчас или раньше?
приведите полные тексты запросов и explain к каждому. и лучше без этой гадости phpшной - глаза сломать можно.

через пхп, но красивее )

explain select f.*,n.date as notedate,n.user as noteuser from `tb_notes` n left join `tb_fotos` f on f.id=n.foto where n.note=10 having f.ok=1 and f.view=0 and f.ero=0 order by n.id desc limit 0,20

(
[id] => 1
[select_type] => SIMPLE
[table] => n
[type] => ALL
[possible_keys] =>
[key] =>
[key_len] =>
[ref] =>
[rows] => 85666
[Extra] => Using where; Using filesort
)

(
[id] => 1
[select_type] => SIMPLE
[table] => f
[type] => eq_ref
[possible_keys] => PRIMARY
[key] => PRIMARY
[key_len] => 4
[ref] => usr_web1_1.n.foto
[rows] => 1
[Extra] =>
)
runtime < 0.1

меняю having на and


explain select f.*,n.date as notedate,n.user as noteuser from `tb_notes` n left join `tb_fotos` f on f.id=n.foto where n.note=10 and f.ok=1 and f.view=0 and f.ero=0 order by n.id desc limit 0,20

(
[id] => 1
[select_type] => SIMPLE
[table] => f
[type] => ALL
[possible_keys] => PRIMARY
[key] =>
[key_len] =>
[ref] =>
[rows] => 12648
[Extra] => Using where; Using temporary; Using filesort
)

(
[id] => 1
[select_type] => SIMPLE
[table] => n
[type] => ref
[possible_keys] => foto
[key] => foto
[key_len] => 4
[ref] => usr_web1_1.f.id
[rows] => 2
[Extra] => Using where
)

runtime > 0.7

Варианты с лимитом без старта и условию по стартовому ID, для обоих запросов выгоды в скорости не приносит )

Всё перепробовал и по id вместо лимита.. единственное что улучшает это having, почти в 10 раз быстрее, впринцепи устраивает, не знаю как будет при увеличении базы.

Explain этого запроса

(
[0] => 1
[id] => 1
[1] => SIMPLE
[select_type] => SIMPLE
[2] => n
[table] => n
[3] => ALL
[type] => ALL
[4] =>
[possible_keys] =>
[5] =>
[key] =>
[6] =>
[key_len] =>
[7] =>
[ref] =>
[8] => 85574
[rows] => 85574
[9] => Using where; Using filesort
[Extra] => Using where; Using filesort
)

(
[0] => 1
[id] => 1
[1] => SIMPLE
[select_type] => SIMPLE
[2] => f
[table] => f
[3] => eq_ref
[type] => eq_ref
[4] => PRIMARY
[possible_keys] => PRIMARY
[5] => PRIMARY
[key] => PRIMARY
[6] => 4
[key_len] => 4
[7] => usr_web1_1.n.foto
[ref] => usr_web1_1.n.foto
[8] => 1
[rows] => 1
[9] =>
[Extra] =>
)
Всего: 830