Ris

Ris

+657
Репутация
3771
Рейтинг
#1 Долгие запросы MySql 8 февраля 2018 в 17:05

Удалите в нем parent_id и rating, им там не место. В индексе user_id последней ячейкой должна быть поле date_pub. Поменяйте местами.

Fuze
Удалил и поменял
Отображение строк 0 — 24 (30 всего, Запрос занял 3.8594 сек.)
SELECT i.*, u.nickname as user_nickname, f.title as folder_title FROM cms_con_anec i FORCE INDEX FOR ORDER BY (date_pub) INNER JOIN cms_users as u FORCE INDEX (PRIMARY) ON u.id = i.user_id LEFT JOIN cms_content_folders as f ON f.id = i.folder_id WHERE (i.is_parent_hidden IS NULL) AND (i.rating > '-20') AND (i.is_deleted IS NULL) AND (i.is_pub = '1') ORDER BY i.date_pub desc LIMIT 0, 30
id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE u ALL PRIMARY NULL NULL NULL 1887 Using temporary; Using filesort
1 SIMPLE i ref dataset_best,dataset_random,date_pub,user_id user_id 7 neos_1.u.id,const 1 Using index condition; Using where
1 SIMPLE f eq_ref PRIMARY PRIMARY 4 neos_1.i.folder_id 1 Using where
Вижу, что подхватился индекс user_id, но почему-то пропропал индекс из таблицы юзеров.
Не могу сказать, что понял в чем дело, но сейчас попробую поэкспериментировать.
Может мне попробовать создать тип контента заново, чтобы все поля и индексы создались автоматически, а потом перенести туда только данные?
#2 Долгие запросы MySql 8 февраля 2018 в 16:33
Блин, что-то не то в обсуждении. Я на это не рассчитывал. shock
Я прекрасно понимаю, что за все в жизни приходится платить. И я готов платить некоторым уменьшением скорости открывания страниц за расширяемость и функционал второй ветки. Но меня все время гложет мысль, что я что-то делаю не так, поэтому и результат такой.
Я надеялся, что мне подскажут правильный путь и ткнут в мою ошибку. А тут холивар...

explain, отладка и судя по всему проверка почему у вас индекс date_pub используется при такой выборке. Ну нет проблем с производительностью от слова совсем. Через explain проверьте какие индексы используются запросом. Полагаю, вы либо сами удалили индекс в таблице от набора, либо при создании набора индекс автоматически не создался.

Fuze
Все индексы создались, удалять индексы и наборы я тоже пробовал. Тип контента свой. Поле контент — голый текст, заголовок генерится из текста при создании итема контента.
  1. CREATE TABLE `cms_con_anec` (
  2. `id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
  3. `title` VARCHAR(255) DEFAULT NULL,
  4. `content` text DEFAULT NULL,
  5. `photo` text DEFAULT NULL,
  6. `slug` VARCHAR(100) DEFAULT NULL,
  7. `seo_keys` VARCHAR(256) DEFAULT NULL,
  8. `seo_desc` VARCHAR(256) DEFAULT NULL,
  9. `seo_title` VARCHAR(256) DEFAULT NULL,
  10. `tags` VARCHAR(1000) DEFAULT NULL,
  11. `date_pub` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP(),
  12. `date_last_modified` TIMESTAMP NULL DEFAULT NULL,
  13. `date_pub_end` TIMESTAMP NULL DEFAULT NULL,
  14. `is_pub` tinyint(1) UNSIGNED NOT NULL DEFAULT 1,
  15. `hits_count` INT(11) UNSIGNED NOT NULL DEFAULT 0,
  16. `user_id` INT(11) UNSIGNED DEFAULT NULL,
  17. `parent_id` INT(11) UNSIGNED DEFAULT NULL,
  18. `parent_type` VARCHAR(32) DEFAULT NULL,
  19. `parent_title` VARCHAR(100) DEFAULT NULL,
  20. `parent_url` VARCHAR(255) DEFAULT NULL,
  21. `is_parent_hidden` tinyint(1) UNSIGNED DEFAULT NULL,
  22. `category_id` INT(11) UNSIGNED NOT NULL DEFAULT 1,
  23. `folder_id` INT(11) UNSIGNED DEFAULT NULL,
  24. `is_comments_on` tinyint(1) UNSIGNED NOT NULL DEFAULT 1,
  25. `comments` INT(11) UNSIGNED NOT NULL DEFAULT 0,
  26. `rating` INT(11) NOT NULL DEFAULT 0,
  27. `is_deleted` tinyint(1) UNSIGNED DEFAULT NULL,
  28. `is_approved` tinyint(1) UNSIGNED NOT NULL DEFAULT 1,
  29. `approved_by` INT(11) UNSIGNED DEFAULT NULL,
  30. `date_approved` TIMESTAMP NULL DEFAULT NULL,
  31. `is_private` tinyint(1) UNSIGNED NOT NULL DEFAULT 0,
  32. PRIMARY KEY (`id`),
  33. KEY `dataset_best` (`is_pub`,`is_parent_hidden`,`is_deleted`,`is_approved`,`rating`),
  34. KEY `dataset_best_yearly` (`date_pub`,`is_pub`,`is_parent_hidden`,`is_deleted`,`is_approved`,`rating`),
  35. KEY `slug` (`slug`),
  36. KEY `date_pub` (`is_pub`,`is_parent_hidden`,`is_deleted`,`is_approved`,`date_pub`,`parent_id`,`rating`) USING BTREE,
  37. KEY `user_id` (`user_id`,`date_pub`,`is_deleted`) USING BTREE,
  38. KEY `dataset_random` (`is_pub`,`is_parent_hidden`,`is_deleted`,`is_approved`,`title`),
  39. KEY `parent_id` (`parent_id`),
  40. FULLTEXT KEY `content` (`title`,`content`)
  41. ) ENGINE=MyISAM AUTO_INCREMENT=128905 DEFAULT CHARSET=utf8 AVG_ROW_LENGTH=446
id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE i ref dataset_best,date_pub,user_id,dataset_random dataset_best 5 const,const,const 119056 Using index condition; Using where; Using filesort
1 SIMPLE u eq_ref PRIMARY PRIMARY 4 neos_1.i.user_id 1
1 SIMPLE f eq_ref PRIMARY PRIMARY 4 neos_1.i.folder_id 1 Using where
#3 Долгие запросы MySql 7 февраля 2018 в 23:40
eoleg,
У меня MyISAM.
Если есть смысл поменять на innodb — напишите, пожалуйста, в чем смысл.
На тестовом сервере переконвертил базу в innodb — особого ускорения не увидел.
#4 Долгие запросы MySql 7 февраля 2018 в 20:31
Что-то я в попытках разобраться в этих тормозах совсем запутался.
У меня уже нервный тик и глаз дергается. shock
Включено кэширование на 2 минуты в memcached, но почему-то вместе с кешем все равно производятся запросы в базу.
Вот это из одной отладки:
  1. /system/controllers/content/model.php => 2251 => modelContent->getContentItemsCount()
  2. SELECT COUNT( i.id ) AS COUNT
  3. FROM cms_con_anec i
  4. FORCE INDEX FOR ORDER BY (date_pub)
  5. WHERE (i.is_parent_hidden IS NULL) AND (i.rating > '-20') AND (i.is_deleted IS NULL) AND (i.is_pub = '1')
  6. Время выполнения 1.69741 секунд
  7. /system/controllers/content/model.php => 2312 => modelContent->getContentItems()
  8. SELECT i.*, u.nickname AS user_nickname, f.title AS folder_title
  9. FROM cms_con_anec i
  10. FORCE INDEX FOR ORDER BY (date_pub)
  11. INNER JOIN cms_users AS u FORCE INDEX (PRIMARY) ON u.id = i.user_id
  12. LEFT JOIN cms_content_folders AS f ON f.id = i.folder_id
  13. WHERE (i.is_parent_hidden IS NULL) AND (i.rating > '-20') AND (i.is_deleted IS NULL) AND (i.is_pub = '1')
  14. ORDER BY i.date_pub DESC
  15. LIMIT 0, 30
  16. Время выполнения 1.71915 секунд
И в то же время использовался кэш:
/system/controllers/content/model.php => 576 => modelContent->getContentFields()
content.fields.anec.7021627cb7c7d6632c0cc7140e2e1100
Время выполнения 0.00054 секунд
/system/controllers/content/model.php => 2251 => modelContent->getContentItemsCount()
content.list.anec.7e5098981456bab4754285a1f92ad413
Время выполнения 0.00036 секунд
/system/controllers/content/model.php => 2312 => modelContent->getContentItems()
content.list.anec.a7d64131ad6086d053170779df8e9ce0
Время выполнения 0.00038 секунд
Такое ощущение, что кэш сохраняется, но не используется.
Что, черт побери, можно еще проверить, чтобы оно зашевелилось?
#5 [ЕСТЬ РЕШЕНИЕ] Откуда берутся папки 6 февраля 2018 в 22:37

Это требуется в первую очередь для скорости чтения файлов на сервере.

Val
Какой смысл экономить на чтении файлов, если Инстант2 все равно гарантированно уткнется в запросы mysql ?
Сайт со 127000 единиц главного типа контента. В нем ни картинок, ни ссылок, голый текст. Главный тип контента выводится на главную страницу.
И всё. Главная страница сайта открывается 5 секунд.
Я задавал вопрос на форуме:
instantcms.ru/forum/thread28414-1.html
Последовал ответ, что мол мускул несвежий и я его готовить не умею. Несколько месяцев бьюсь с настройками мускула, но проблема так и не решена.
На опенсервере тормозит почти также (4 секунды главная страница).
А на первой ветке, где тысячи файлов в одной папке, этот же сайт летал.
Так что не в количестве файлов в папке проблема, а в модели контента…
#6 [ЕСТЬ РЕШЕНИЕ] Откуда берутся папки 6 февраля 2018 в 21:50
Кто мне объяснит, в чем надобность отдельной папки для каждого файла?
Что страшного, если в одной папке будет лежать много файлов?
#7 Помогите собрать код в PHP 3 февраля 2018 в 09:26
snoopik,
instantcms.ru/users/files/download6811.html
Но все же почитайте что-нибудь про HTML...
Вот тут курс пройдите:
htmlacademy.ru/
#8 Помогите собрать код в PHP 2 февраля 2018 в 19:42

Вот наглядно посмотрите:

snoopik
Вот это — правильная ссылка.
Все же работает, что нужно-то?
Запихнуть это в один файл? Или адаптировать в smarty, который используется в Instantcms1?
#9 Помогите собрать код в PHP 2 февраля 2018 в 17:29
А объяснить словами, что этот калькулятор должен делать, можете?
#10 Помогите собрать код в PHP 2 февраля 2018 в 15:28
snoopik,
Оба кода представляют из себя web-страницы с чекбоксами.
В первом не хватает лишь тегов <script></script> вокруг яваскрипта.
Но дальше-то что этот код должен делать?
#11 Папка Upload как ее чистить? 1 февраля 2018 в 22:22

Простите, если — бред… просто я в exel-е только более менее разбираюсь

Dmitry
Бред- не бред, не важно.
Но что придется сравнивать два огромных массива — это факт. И лучше на это время останавливать все остальные приложения на сервере…
#12 Папка Upload как ее чистить? 1 февраля 2018 в 21:12
Rainbow,
Как вариант.

Потом все эти имена ищем в базе и которые не найдены заносим в новый массив

Dmitry
Употребит втрое больше памяти.
#13 Папка Upload как ее чистить? 1 февраля 2018 в 21:02

Так не получится?

Dmitry
Нет. То, чего не будет в этих 10000 — будет удалено.
#14 Папка Upload как ее чистить? 1 февраля 2018 в 20:35

Кусками может как то? За несколько подходов.

Dmitry
Ну да. В первый подход убиваем чего нет в первом массиве, во втором — чего нет во втором. Третьего не нужно — папка абсолютно пуста. laugh
Может в JSON запихивать? scratch
#15 Папка Upload как ее чистить? 1 февраля 2018 в 19:58
Тут поступило предложение сделать новую утилиту для расчистки неиспользуемых файлов из аплоуда второй ветки.
Предлагаю следующий алгоритм:
1.Перебираем все таблицы базы в поисках полей типа picture, image, img, photo, content.
2. Ищем в полях этих таблиц все строки типа png, gif, jpg, jpeg, bmp и все имена файлов заносим в бооооольшой массив.
3. Рекурсивно перебираем файлы в аплоаде и тоже заносим их имена в массив.
4. Сравниваем массивы и разницу заносим в третий массив.
5. Удаляем все массивы, кроме третьего, и при его переборе удаляем файлы, имена которых содержатся в нем.
У кого не хватит оперативки на сервере — я не виноват.
Если есть какие-то более другие мысли — излагайте.
🍪Мы используем файлы cookie для работы сайта. Читать подробнее.