Справочник системных ошибок и решений

Windows Server, Active Directory, 1С:Предприятие, СУБД, Linux, Cisco, MikroTik, Asterisk.

⚠️ Важная информация Все материалы, инструкции, команды и скрипты на сайте предоставлены исключительно в ознакомительных целях. Их применение может повлиять на работу операционной системы, программного обеспечения, баз данных, сетевого оборудования и других компонентов инфраструктуры. Перед выполнением действий создайте резервную копию и по возможности протестируйте изменения в безопасной среде. Пользователь самостоятельно оценивает риски и несет ответственность за результат. При отсутствии необходимых знаний обратитесь к квалифицированному ИТ-специалисту.

CDR_ODBC_WRITE_FAIL IP-Телефония и СКУД

Траблшутинг и оптимизация базы данных CDR / CEL в Asterisk: MySQL и PostgreSQL

Обновлено: 24.08.2026 · Официальная документация ↗
  • Прекращение записи статистики звонков в таблицу cdr или cel.
  • В CLI Asterisk регистрируются ошибки res_odbc: Error SQLFetch / Could not execute query.
  • Зависание завершения вызовов и резкий рост нагрузки на сервер БД из-за гигантского размера таблицы CDR (>10 млн записей).
  • Несоответствие длительности разговора (Billsec) реальному времени вызова.

1. Настройка коннектора unixODBC (/etc/odbc.ini)

Файл /etc/odbc.ini:

[asterisk-connector]
Description = MySQL connection to Asterisk CDR
Driver = MySQL
Server = 127.0.0.1
Database = asteriskdb
Port = 3306
User = asterisk_user
Password = SecureDbPassword
Option = 3
Socket = /var/run/mysqld/mysqld.sock

Проверьте соединение через утилиту isql:

isql -v asterisk-connector

2. Конфигурация res_odbc.conf и cdr_adaptive_odbc.conf

Файл /etc/asterisk/res_odbc.conf:

[asteriskdb]
enabled => yes
dsn => asterisk-connector
max_connections => 20
pooling => yes
limit => 10
username => asterisk_user
password => SecureDbPassword
pre-connect => yes

Файл /etc/asterisk/cdr_adaptive_odbc.conf:

[first]
connection=asteriskdb
table=cdr
alias start => calldate

3. Оптимизация и индексация таблицы CDR в MySQL/MariaDB

-- Создание композитных индексов для быстрых выборок в CRM
ALTER TABLE cdr ADD INDEX idx_calldate (calldate);
ALTER TABLE cdr ADD INDEX idx_src_dst (src, dst);
ALTER TABLE cdr ADD INDEX idx_uniqueid (uniqueid);
ALTER TABLE cdr ADD INDEX idx_disposition_calldate (disposition, calldate);

4. Партиционирование таблицы CEL (Call Event Logging)

Для таблиц с миллионами строк настройте помесячное секционирование:

ALTER TABLE cel PARTITION BY RANGE (UNIX_TIMESTAMP(eventtime)) (
    PARTITION p2026_01 VALUES LESS THAN (UNIX_TIMESTAMP('2026-02-01 00:00:00')),
    PARTITION p2026_02 VALUES LESS THAN (UNIX_TIMESTAMP('2026-03-01 00:00:00')),
    PARTITION p_max VALUES LESS THAN MAXVALUE
);

5. Проверка статуса подсистемы в CLI

asterisk -rx "odbc show asteriskdb"
asterisk -rx "cdr show status"
💡 Практика специалистов: Никогда не выполняйте сложные аналитические SELECT-запросы с группировками напрямую на боевой таблице CDR в часы пиковой нагрузки. Настройте Master-Slave репликацию БД и направляйте аналитику и веб-интерфейс CRM на Read-Only реплику.

Частые вопросы (FAQ)

В чем отличие между CDR и CEL?

CDR (Call Detail Records) сохраняет одну итоговую запись о вызове (кто, кому, когда, сколько секунд говорил, статус). CEL (Call Event Logging) сохраняет подробный лог каждого микро-события внутри звонка (старт, ответ, перевод на удержание, трансфер, вход в очередь).

Почему при потере связи с базой данных Asterisk начинает зависать?

Если драйвер CDR настроен на синхронную блокирующую запись без пула потоков, каждый завершающийся звонок ждет ответа от упавшего сокета MySQL. Использование res_odbc с пулом соединений устраняет эту проблему.

Как писать CDR в PostgreSQL вместо MySQL?

Установите odbc-postgresql, опишите DSN в /etc/odbc.ini с драйвером PostgreSQL Unicode и укажите этот DSN в res_odbc.conf.

Что означает поле disposition = 'NO ANSWER' при наличии billsec > 0?

Это признак аномалии, возникающей при некорректном выполнении команды ResetCDR() в диалплане перед выполнением вызова или ошибке в логике трансфера.

Полезные материалы
Рекомендуем