Как работает Spamassassin bayes расположенная на выделенном сервере PostgreSQL

EXIM, sendmail, postfix, Dovecot и прочие. Решение проблем связанных с работой электронной почты

Модератор: xM

Правила форума
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
Аватара пользователя
Amaka
мл. сержант
Сообщения: 78
Зарегистрирован: 2016-02-03 12:05:11
Откуда: Москва

Как работает Spamassassin bayes расположенная на выделенном сервере PostgreSQL

Непрочитанное сообщение Amaka » 2019-05-14 12:05:57

Добрый день!
Кто-нибудь использует для базы bayes выделенный сервер PostgreSQL?
У меня проблема в MySQL. Т.к. сейчас использую для хранения базы bayes выделенные сервера MySQL (master-master).
При больших потоках писем вижу ошибки MySQL deadlock и жуткие тормоза.
Всем удачи!

Хостинговая компания Host-Food.ru
Хостинг HostFood.ru
 

Услуги хостинговой компании Host-Food.ru

Хостинг HostFood.ru

Тарифы на хостинг в России, от 12 рублей: https://www.host-food.ru/tariffs/hosting/
Тарифы на виртуальные сервера (VPS/VDS/KVM) в РФ, от 189 руб.: https://www.host-food.ru/tariffs/virtualny-server-vps/
Выделенные сервера, Россия, Москва, от 2000 рублей (HP Proliant G5, Intel Xeon E5430 (2.66GHz, Quad-Core, 12Mb), 8Gb RAM, 2x300Gb SAS HDD, P400i, 512Mb, BBU):
https://www.host-food.ru/tariffs/vydelennyi-server-ds/
Недорогие домены в популярных зонах: https://www.host-food.ru/domains/


Аватара пользователя
Amaka
мл. сержант
Сообщения: 78
Зарегистрирован: 2016-02-03 12:05:11
Откуда: Москва

Как работает Spamassassin bayes расположенная на выделенном сервере PostgreSQL

Непрочитанное сообщение Amaka » 2019-05-16 9:15:20

Стоит InnoDB.
mysql Ver 14.14 Distrib 5.5.62, for FreeBSD11.2 (amd64) using readline 8.0

Код: Выделить всё

Create Table: CREATE TABLE `bayes_token` (
  `id` int(11) NOT NULL DEFAULT '0',
  `token` binary(5) NOT NULL DEFAULT '\0\0\0\0\0',
  `spam_count` int(11) NOT NULL DEFAULT '0',
  `ham_count` int(11) NOT NULL DEFAULT '0',
  `atime` int(11) NOT NULL DEFAULT '0',
  PRIMARY KEY (`id`,`token`),
  KEY `bayes_token_idx1` (`id`,`atime`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1

Create Table: CREATE TABLE `bayes_seen` (
  `id` int(11) NOT NULL DEFAULT '0',
  `msgid` varchar(200) CHARACTER SET latin1 COLLATE latin1_bin NOT NULL DEFAULT '',
  `flag` char(1) NOT NULL DEFAULT '',
  `time_updated` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`,`msgid`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1

Create Table: CREATE TABLE `bayes_expire` (
  `id` int(11) NOT NULL DEFAULT '0',
  `runtime` int(11) NOT NULL DEFAULT '0',
  KEY `bayes_expire_idx1` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1

Create Table: CREATE TABLE `bayes_vars` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `username` varchar(200) NOT NULL DEFAULT '',
  `spam_count` int(11) NOT NULL DEFAULT '0',
  `ham_count` int(11) NOT NULL DEFAULT '0',
  `token_count` int(11) NOT NULL DEFAULT '0',
  `last_expire` int(11) NOT NULL DEFAULT '0',
  `last_atime_delta` int(11) NOT NULL DEFAULT '0',
  `last_expire_reduce` int(11) NOT NULL DEFAULT '0',
  `oldest_token_age` int(11) NOT NULL DEFAULT '2147483647',
  `newest_token_age` int(11) NOT NULL DEFAULT '0',
  PRIMARY KEY (`id`),
  UNIQUE KEY `bayes_vars_idx1` (`username`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=latin1

Create Table: CREATE TABLE `bayes_global_vars` (
  `variable` varchar(30) NOT NULL DEFAULT '',
  `value` varchar(200) NOT NULL DEFAULT '',
  PRIMARY KEY (`variable`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1

Всем удачи!

Аватара пользователя
skeletor
майор
Сообщения: 2548
Зарегистрирован: 2007-11-16 18:22:04

Как работает Spamassassin bayes расположенная на выделенном сервере PostgreSQL

Непрочитанное сообщение skeletor » 2019-05-16 9:23:52

Ого, вот это динозавр 5.5. Обновитесь хотя бы до 5.6 или 5.7 (тут больше фиксов для Innodb, хотя по скорости немного медленнее, чем 5.6). Насчёт mysql 8, то она слишком медленная (по сравнению 5.6/5.7) и профита для её использования на продакшине под нагрузкой пока не вижу.

Лучше смотреть то, что сейчас на сервере, то есть

Код: Выделить всё

mysql>show create table `bayes_vars`;
а не в скрипте. А видно на какой таблице deadlock'и?

Аватара пользователя
Amaka
мл. сержант
Сообщения: 78
Зарегистрирован: 2016-02-03 12:05:11
Откуда: Москва

Как работает Spamassassin bayes расположенная на выделенном сервере PostgreSQL

Непрочитанное сообщение Amaka » 2019-05-16 9:42:30

Вот что в логах:

Код: Выделить всё

190423 14:04:15 [ERROR] Slave SQL: Error 'Deadlock found when trying to get lock; try restarting transaction' on query. 
                          Default database: 'spamas_db'. 
                Query: 'INSERT INTO bayes_token
               (id, token, spam_count, ham_count, atime)
               VALUES ('2','<8E><AC>t<EC><84>','0','1','1528886783')
               ON DUPLICATE KEY UPDATE spam_count = GREATEST(spam_count + '0', 0),
                                       ham_count = GREATEST(ham_count + '1', 0),
                                       atime = GREATEST(atime, '1528886783')', Error_code: 1213
190423 14:04:33 [ERROR] Slave SQL: Error 'Deadlock found when trying to get lock; try restarting transaction' on query. 
                         Default database: 'spamas_db'. 
                Query: 'INSERT INTO bayes_token
               (id, token, spam_count, ham_count, atime)
               VALUES ('2','<9D>mBi^T','0','1','1528886783')
               ON DUPLICATE KEY UPDATE spam_count = GREATEST(spam_count + '0', 0),
                                       ham_count = GREATEST(ham_count + '1', 0),
                                       atime = GREATEST(atime, '1528886783')', Error_code: 1213
190423 14:04:59 [ERROR] Slave SQL: Error 'Deadlock found when trying to get lock; try restarting transaction' on query. 
                         Default database: 'spamas_db'. 
                Query: 'INSERT INTO bayes_token
               (id, token, spam_count, ham_count, atime)
               VALUES ('2','<9D>mBi^T','0','1','1528886783')
               ON DUPLICATE KEY UPDATE spam_count = GREATEST(spam_count + '0', 0),
                                       ham_count = GREATEST(ham_count + '1', 0),
                                       atime = GREATEST(atime, '1528886783')', Error_code: 1213

Но это возникает при большом потоке писем. У меня несколько серверов с установленным Spamassassin.
Всем удачи!