Новое:Talanto осенью: поиск с цифрами, вакансия по шагам и каталог компаний

+1 260новых вакансий за сутки·70 005вакансий открыто сейчас·Новое:Talanto осенью: поиск с цифрами, вакансия по шагам и каталог компаний

Новые вакансии в TelegramРаботодателям
Talanto
Вакансии
Компании6 270
РезюмеAIПодготовкаСтатьи
BoostТарифыBoost
Войти

Не нашли подходящее?

Пусть нужная вакансия найдёт вас сама.

  1. Подборка в TelegramНовые вакансии по вашему фильтру — сразу в бота.Подключить
  2. Мэтчи по резюмеЗагрузите резюме — покажем, где вы подходите лучше всего.Загрузить
  3. Сохранить фильтрНастройте поиск один раз и возвращайтесь к новым вакансиям.Настроить
Что нового на TalantoTalanto осенью: поиск с цифрами, вакансия по шагам и каталог компаний

Для работодателей

Опубликуйте вакансию — отклики придут в ваш кабинет.

  1. Вакансиябесплатно
  2. Откликиконтакты бесплатно
  3. Наймэтапы и интервью

40 компаний публикуют вакансии напрямую · 4 400 кандидатов открыты к предложениям

Разместить вакансию

Популярные направления

Все подборки
  • Python14 550
  • Облачные технологии10 965
  • QA вакансии3 255
  • Android1 702
  • Инженер данных1 270
  • Продакт-менеджер586

Разработка

  • Backend вакансии1 657
  • iOS1 575
  • AI вакансии798
  • Fullstack вакансии672
  • Frontend вакансии578
  • Mobile вакансии30

По стеку

  • Go7 978
  • Java5 162
  • Node.js1 622
  • Kotlin1 384
  • Rust1 326
  • .NET1 258
  • PHP538
  • C++386
  • C#356

DevOps и инфраструктура

  • Kubernetes6 272
  • Linux-инфраструктура4 763
  • DevOps вакансии4 488
  • Terraform / IaC3 459
  • Мониторинг и Observability1 587
  • CI/CD1 482
  • SRE458
  • Кибербезопасность127

Аналитика и данные

  • Аналитик данных683
  • Бизнес-аналитик638
  • Data Scientist622
  • Системный аналитик92

Другие направления

  • Проджект-менеджер202
  • UI/UX дизайн93
  • Ручное тестирование14

По регионам

  • Вакансии в США34 823
  • Вакансии в Европе15 244
  • Работа в России3 882
  • Вакансии в Канаде3 408

По формату

  • Удалённые вакансии54 624
  • Релокация в США34 823
  • Гибридная работа9 286
  • Офисная работа6 546

По уровню

  • Senior вакансии31 197
  • Middle вакансии14 037
  • Junior вакансии5 059

Сейчас нанимают

Все компании
  • Wise194 вакансии
  • Rakuten189 вакансий
  • ASML164 вакансии
  • Grab134 вакансии
  • Celonis45 вакансий
  • Spotify37 вакансий
  • Infobip28 вакансий
  • Adyen27 вакансий
  • Monzo19 вакансий
  • Darktrace17 вакансий

Вакансии из 344 источников: карьерные страницы компаний и джоб-борды.

КомпанииО насНовостиПубличная офертаУсловия использованияПолитика конфиденциальностиПоддержка
←К подготовке по вакансии←К теме MySQLВсе вопросы
MySQLMiddleТеория

Что такое свойства ACID и как InnoDB их реализует?

В закладки
Сначала попробуйте ответить сами30 секунд
Сравнить с ответом ↓

ACID в InnoDB: атомарность через undo log, согласованность через FK/CHECK, изоляция через MVCC и уровни transaction_isolation, долговечность через redo log с innodb_flush_log_at_trx_commit=1 и doublewrite buffer.

Уровни изоляции и их эффекты

-- Посмотреть текущий уровень
SHOW VARIABLES LIKE 'transaction_isolation';

-- Изменить для сессии
SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED;

-- READ UNCOMMITTED — грязное чтение (dirty read)
-- READ COMMITTED   — нет грязного чтения, возможен non-repeatable read
-- REPEATABLE READ  — default InnoDB; нет non-repeatable read; phantom read
--                    закрыт next-key locks
-- SERIALIZABLE     — полная блокировка; SELECT превращается в SELECT ... FOR SHARE

Что такое ACID

ACID — четыре свойства, которые гарантирует транзакционная СУБД. В MySQL эти свойства реализует движок InnoDB; MyISAM их не поддерживает.

  • Atomicity (атомарность) — транзакция либо применяется целиком, либо откатывается. InnoDB использует undo log: до изменения строки старая версия записывается в undo-сегмент табличного пространства. При ROLLBACK или сбое движок читает undo log и восстанавливает прежние данные.
  • Consistency (согласованность) — данные всегда удовлетворяют ограничениям: NOT NULL, UNIQUE, FOREIGN KEY, CHECK (MySQL 8.0.16+). InnoDB проверяет FK до фиксации; нарушение вызывает ошибку и автоматический откат.
  • Isolation (изоляция) — параллельные транзакции не видят промежуточных состояний друг друга. InnoDB реализует MVCC (Multi-Version Concurrency Control): каждая строка хранит поле DB_TRX_ID и указатель на undo log. Уровень изоляции задаётся переменной transaction_isolation.
  • Durability (долговечность) — зафиксированные данные не теряются при сбое. InnoDB записывает изменения в redo log (файлы #ib_redo* в MySQL 8.0+, ib_logfile* в 5.7) до записи страниц в data file. Переменная innodb_flush_log_at_trx_commit=1 обеспечивает fsync после каждого COMMIT.

Ключевые механизмы InnoDB

  • Redo log — журнал для восстановления после сбоя (crash recovery). InnoDB применяет его при старте, если страницы не были сброшены на диск.
  • Undo log — хранит старые версии строк для ROLLBACK и для consistent read в MVCC.
  • Doublewrite buffer — защита от частичной записи страницы (torn page): InnoDB сначала записывает страницу в doublewrite-область, затем в настоящее место. При сбое восстанавливает из doublewrite.
  • MVCC и consistent read — SELECT без FOR UPDATE читает «снимок» данных на момент начала транзакции (REPEATABLE READ) или на момент каждого запроса (READ COMMITTED), не блокируя пишущие транзакции.

Проверка состояния InnoDB

-- Общий статус движка: транзакции, блокировки, redo log, buffer pool
SHOW ENGINE INNODB STATUS\G

-- Активные транзакции
SELECT trx_id, trx_state, trx_started, trx_query
FROM information_schema.INNODB_TRX;

-- Ожидания блокировок (MySQL 8.0)
SELECT * FROM performance_schema.data_lock_waits;

-- Настройки durability
SHOW VARIABLES LIKE 'innodb_flush_log_at_trx_commit';
SHOW VARIABLES LIKE 'innodb_doublewrite';

Пример транзакции с демонстрацией атомарности

START TRANSACTION;

UPDATE accounts SET balance = balance - 500 WHERE id = 1;
UPDATE accounts SET balance = balance + 500 WHERE id = 2;

-- Если второй UPDATE упал — ROLLBACK вернёт оба изменения
COMMIT;

Подводные камни

  • innodb_flush_log_at_trx_commit=2 — ускоряет запись, но при сбое ОС можно потерять до 1 секунды транзакций. Значение 0 ещё опаснее — сбой mysqld тоже даёт потерю данных.
  • DDL вызывает implicit commit — если внутри транзакции выполнить CREATE TABLE, ALTER TABLE, TRUNCATE, DROP — MySQL незаметно фиксирует всё, что было до этого, и начинает новую транзакцию.
  • autocommit=1 по умолчанию — каждый DML-запрос вне явного BEGIN является отдельной транзакцией. Забытый START TRANSACTION означает, что откат невозможен.
  • MyISAM не поддерживает ACID — таблицы MyISAM не имеют redo/undo log и транзакций. Смешение InnoDB и MyISAM в одной бизнес-операции разрушает атомарность.
  • Next-key locks и phantom read — InnoDB в REPEATABLE READ блокирует не только конкретные строки, но и «щели» (gaps) между ними. Это предотвращает phantom read, но увеличивает вероятность дедлока при параллельных INSERT.
  • Долгие транзакции раздувают undo log — чем дольше открыта транзакция, тем больше старых версий строк хранит undo tablespace. Это замедляет purge thread и увеличивает MVCC-overhead для всех читателей.
  • Consistent read vs locking read — SELECT без FOR UPDATE использует MVCC-снимок и не блокирует; SELECT ... FOR UPDATE берёт row-level lock. Смешение этих режимов в одной транзакции — частая причина race condition.
  • Crash recovery зависит от redo log size — слишком маленький innodb_log_file_size (MySQL 5.7) ускоряет checkpoint, но замедляет восстановление при большом объёме грязных страниц.

Частые вопросы на собеседовании

  • Как предотвратить SQL injection при работе с MySQL?
  • Как делать backup/restore и point-in-time recovery через binary logs?
  • Что такое MySQL и каковы его основные области применения?
  • Что такое транзакции в MySQL и как их использовать?

Типичные ошибки

  • Не уточнять storage engine и говорить о acid в innodb так, будто MyISAM и InnoDB ведут себя одинаково.
  • Игнорировать implicit commit, autocommit, isolation level или binlog там, где они меняют ответ.
  • Описывать PostgreSQL-поведение как MySQL-поведение.
  • Забывать проверить план через EXPLAIN и фактическую версию MySQL.

Что проверяет интервьюер

  • Кандидат объясняет acid в innodb через реальный механизм MySQL, а не общими словами.
  • Приводит корректный SQL или диагностический запрос для этой СУБД.
  • Называет ограничения, версионные отличия или эксплуатационные последствия.
  • Связывает ответ с проектированием приложения, производительностью, надежностью или безопасностью.

Как вы знаете этот вопрос?

Проверить себя по теме MySQL →

Источники

  • https://dev.mysql.com/doc/refman/8.4/en/innodb-transaction-model.html
  • https://dev.mysql.com/doc/refman/8.4/en/commit.html
←Предыдущий вопросДля каких типов нагрузок MySQL подходит лучше всего, а где стоит выбрать другую базу данных?Следующий вопрос→Какие параметры InnoDB реально важны для MySQL 8.x performance tuning: `innodb_buffer_pool_size`, redo log, temp tables и connection limits?

Связанные темы

MySQLdata-integritytransaction-design