- Поисковые системы
- Практика оптимизации
- Трафик для сайтов
- Монетизация сайтов
- Сайтостроение
- Социальный Маркетинг
- Общение профессионалов
- Биржа и продажа
- Финансовые объявления
- Работа на постоянной основе
- Сайты - покупка, продажа
- Соцсети: страницы, группы, приложения
- Сайты без доменов
- Трафик, тизерная и баннерная реклама
- Продажа, оценка, регистрация доменов
- Ссылки - обмен, покупка, продажа
- Программы и скрипты
- Размещение статей
- Инфопродукты
- Прочие цифровые товары
- Работа и услуги для вебмастера
- Оптимизация, продвижение и аудит
- Ведение рекламных кампаний
- Услуги в области SMM
- Программирование
- Администрирование серверов и сайтов
- Прокси, ВПН, анонимайзеры, IP
- Платное обучение, вебинары
- Регистрация в каталогах
- Копирайтинг, переводы
- Дизайн
- Usability: консультации и аудит
- Изготовление сайтов
- Наполнение сайтов
- Прочие услуги
- Не про работу
В 2023 году Google заблокировал более 170 млн фальшивых отзывов на Картах
Это на 45% больше, чем в 2022 году
Оксана Мамчуева
Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий
вводные данные:
MacOS, MAMP, MYSQL, APACHIE
Имеем php файл, выполняющий слдующую задачу:
1) выбираем из БД запись с УРЛ
2) Загружаем этот УРЛ
3) Парсим
4) Проверяем много много отпарсенных данных на наличие в БД
5) Если нет - добавляем
6) Прекращаем работу
7) Через секунду перезапускаемся
Одновременно во вкладках открыто 30 таких файлов.
(каждый выбирает изначально разные строки из пункта 1)
Смысл в том чтобы выборка из БД, загрузка страниц и добавление данных шло в 30 потоков
По факту, апач запускает 30 процессов - без проблем, а MySQL держит 6 коннектов и не больше!
+------+------+-----------+--------------+---------+------+------------------------------+----------------------------------------------------------------------+
| Id | User | Host | db | Command | Time | State | Info |
+------+------+-----------+--------------+---------+------+------------------------------+----------------------------------------------------------------------+
| 2641 | root | localhost | google_place | Query | 1 | Waiting for table level lock | UPDATE `dev_company_addr` SET `flag` = 2 WHERE `id` = 869059 LIMIT 1 |
| 2643 | root | localhost | google_place | Query | 1 | Waiting for table level lock | UPDATE `dev_company_addr` SET `flag` = 3 WHERE `id` = 867043 LIMIT 1 |
| 2644 | root | localhost | google_place | Query | 2 | Sending data | SELECT * FROM `dev_company_addr` WHERE `flag`=0 LIMIT 500, 1 |
| 2645 | root | localhost | google_place | Query | 2 | Sending data | SELECT * FROM `dev_company_addr` WHERE `flag`=0 LIMIT 800, 1 |
| 2646 | root | localhost | google_place | Query | 2 | Sending data | SELECT * FROM `dev_company_addr` WHERE `flag`=0 LIMIT 200, 1 |
| 2647 | root | localhost | google_place | Query | 1 | Sending data | SELECT * FROM `dev_company_addr` WHERE `flag`=0 LIMIT 300, 1 |
| 2648 | root | localhost | | Query | 0 | | show processlist |
+------+------+-----------+--------------+---------+------+------------------------------+----------------------------------------------------------------------+
Как заставить MySQL тоже держать 30 одновременных коннектов?
Данные добавляются и проверяются на наличие в 1 таблице, чтобы обновление и вставка не блокировали друг друга тип таблицы InnoDB - верно ли это?
Каковы значения:
max_user_connections
max_connections
?
Верно.
Каковы значения:
max_user_connections
max_connections
?
Верно.
my.conf:
# The following options will be passed to all MySQL clients
[client]
#password = your_password
#port = 9999
socket = /Applications/MAMP/tmp/mysql/mysql.sock
# Here follows entries for some specific programs
# The MySQL server
[mysqld]
#port = 9999
socket = /Applications/MAMP/tmp/mysql/mysql.sock
key_buffer = 16M
max_allowed_packet = 16M
table_cache = 64
sort_buffer_size = 512K
net_buffer_length = 8K
read_buffer_size = 256K
read_rnd_buffer_size = 512K
myisam_sort_buffer_size = 8M
#Alex temp
max_connections = 100
#end
MAMP_bind-address_MAMP
MAMP_skip-networking_MAMP
server-id = 1
[mysqldump]
quick
max_allowed_packet = 16M
[mysql]
no-auto-rehash
# Remove the next comment character if you are not familiar with SQL
#safe-updates
[isamchk]
key_buffer = 20M
sort_buffer_size = 20M
read_buffer = 2M
write_buffer = 2M
[myisamchk]
key_buffer = 20M
sort_buffer_size = 20M
read_buffer = 2M
write_buffer = 2M
[mysqlhotcopy]
interactive-timeout
# DONT REMOVE: MAMP PRO my.cnf template compatibility version: 5
удалил большие каменты
InnoDB - верно ли это?
Верно-то верно, но у вас, судя по этой блокировке, не все таблицы innodb :
| 2641 | root | localhost | google_place | Query | 1 | Waiting for table level lock | UPDATE `dev_company_addr` SET `flag` = 2 WHERE `id` = 869059 LIMIT 1 |
Надо бы убедиться. Хотя, такое состояние потока и при innodb возможно.
Верно-то верно, но у вас, судя по этой блокировке, не все таблицы innodb :
Надо бы убедиться. Хотя, такое состояние потока и при innodb возможно.
да, вы правы)))
МуИсам было, с этим меняю.
А что по коннектам?
Просто в некоторых других таких задачах я открывал соединение, выбирал урл, закрывал соединение, парсил, обрабатывал (около 5 сек), затем снова открывал соединение и добавлял данные
да, вы правы)))
МуИсам было, с этим меняю.
А что по коннектам?
Просто в некоторых других таких задачах я открывал соединение, выбирал урл, закрывал соединение, парсил, обрабатывал (около 5 сек), затем снова открывал соединение и добавлял данные
Вы что-то путаете, mysql сама разбирается, когда и что ей открывать.
Если вы хотите постоянное соединение, это вроде как надо http://www.php.su/functions/?mysql_pconnect
Но уже не помню устаревшее оно или нет.
Вообще у вас какие проблемы с работой то?
работает в реальности 30 потоков пхп и апача - а мускула тока 6
---------- Добавлено 02.08.2015 в 17:21 ----------
max_user_connections
max_connections
выставил 32 на оба параметра
Но ситуация не изменилась.
работает в реальности 30 потоков пхп и апача - а мускула тока 6
Вы смотрите НЕ потоки. А просто текущую задачу. Оно могло уже выполниться и всё. Вы как отслеживаете, что именно только 6-ть потоков?
Попробуйте тогда ещё:
thread_concurrency. Если у вас много памяти и много таблиц, то для увеличения производительности, при запуске сервера рекомендуется использовать следующие формулы, учитывающие специфику работы mysql под различные ОС:
Для FreeBSD: thread_concurrency = (кол-во процессоров)*(кол-во ядер в одном процессоре)
Для Linux: thread_concurrency = (кол-во процессоров)*(кол-во ядер в одном процессоре)*3
Почему на Linux можно давать можно и нужно давать больше потоков, чем на FreeBSD? Это связано с тем, что Linux умеет распределять и управлять потоками между ядрами, а FreeBSD не умеет, зато FreeBSD умеет эффективно распределять процессы, чего, в свою очередь, не умеет Linux.
А что по коннектам?
Ничего. Статистически, изменения в конфиге mysql почти никогда никому не помогают. Не надо их портить. Там было 100 - пусть и останется.
А вот разбор как же обрабатывается запросы и изменение приложения - почти наверняка помогает.
Но ситуация не изменилась.
А что же теперь в processlist ?
Просто в некоторых других таких задачах я открывал соединение, выбирал урл, закрывал соединение, парсил, обрабатывал (около 5 сек), затем снова открывал соединение и добавлял данные
почему бы нет.
Не доказано. ( Хотя и такое возможно, если есть какая-то проблема с созданием процессов )
Просто видим 6 потоков. Просто клиент не хочет их создавать. Ошибки на клиенте ведь не возникают?
Ничего. Статистически, изменения в конфиге mysql почти никогда никому не помогают. Не надо их портить. Там было 100 - пусть и останется.
А вот разбор как же обрабатывается запросы и изменение приложения - почти наверняка помогает.
А что же теперь в processlist ?
Aleksejs-MBP:bin ALEX$ ./mysqladmin -uroot -proot processlist
+------+------+-----------+--------------+---------+------+--------------+---------------------------------------------------------------+
| Id | User | Host | db | Command | Time | State | Info |
+------+------+-----------+--------------+---------+------+--------------+---------------------------------------------------------------+
| 2776 | root | localhost | google_place | Query | 5 | Sending data | SELECT * FROM `dev_company_addr` WHERE `flag`=0 LIMIT 1000, 1 |
| 2777 | root | localhost | google_place | Query | 5 | Sending data | SELECT * FROM `dev_company_addr` WHERE `flag`=0 LIMIT 800, 1 |
| 2778 | root | localhost | google_place | Query | 5 | Sending data | SELECT * FROM `dev_company_addr` WHERE `flag`=0 LIMIT 1800, 1 |
| 2779 | root | localhost | google_place | Query | 5 | Sending data | SELECT * FROM `dev_company_addr` WHERE `flag`=0 LIMIT 2900, 1 |
| 2780 | root | localhost | google_place | Query | 5 | Sending data | SELECT * FROM `dev_company_addr` WHERE `flag`=0 LIMIT 1500, 1 |
| 2781 | root | localhost | google_place | Query | 4 | Sending data | SELECT * FROM `dev_company_addr` WHERE `flag`=0 LIMIT 300, 1 |
| 2782 | root | localhost | | Query | 0 | | show processlist |
+------+------+-----------+--------------+---------+------+--------------+---------------------------------------------------------------+
почему бы нет.
Не доказано. ( Хотя и такое возможно, если есть какая-то проблема с созданием процессов )
Просто видим 6 потоков. Просто клиент не хочет их создавать. Ошибки на клиенте ведь не возникают?
Способ с закрытием коннекта - для данной задачи, к сожалению, в этом процессе не подходит.
Ошибок на клиенте нет.
Думаете надо в настройках апача поковырятся ещё?
AlexVenga, да просто сделайте из разных окон еще несколько пользовательских (не root) подключений чтобы их было больше 6. И узнаете есть ли проблема с обработкой дополнительных подключений у mysql