mysql 에서는 테이블 조회할때 마다 read lock 을 잡고,
이경우 다른 세션에서 ddl 을 진행할수가 없다.
sudo mysql -uroot -p
create database testdb;
create user 'test'@'%' identified by '1111';
grant all on testdb.* to 'test'@'%';
FLUSH PRIVILEGES;
use testdb
create table aaa ( a int);
insert into aaa values(1);
commit;
터미널 하나를 열고 test 유저로 testdb 에 접속하자.
-- session A (test)
sudo mysql -utest -p1111
use testdb
select * from aaa;
터미널 하나를 더 열고 ddl 을 진행해보자.
-- session B (test2)
drop table aaa;
=> drop 이 진행되지 않고 대기상태에 빠짐.
이 경우에는
1. A세션 에서 commit;
2. A세션 에서 exit;
하는 식으로 lock 을 해소.
mysql 은 오토커밋이 디폴트로 되어있다.
오토커밋 환경에서는 위와 같은 조회만으로 다른 세션에서 ddl 대기가 생길일이 없다.
그러나 실제 운영환경에서는 아마도 오토커밋 안되게 하는 것이 대부분일 것인데
여기에 익숙치 않으면 종종 이런 일들이 발생할수 있을것 같다.
오토커밋을 안쓴다면 interactive_timeout 은 필히 바꿀 필요가 있다.
반응형
'생계 > MySQL' 카테고리의 다른 글
mysql 자주쓰는 함수 (0) | 2023.11.06 |
---|---|
mysql show 명령어 db정보 확인 (0) | 2023.10.23 |
mysql 설치 후 바꾸는 것을 고려할 만한 디폴트 설정 알아보자 (0) | 2021.07.31 |
가상머신 virtualbox mysql 설치 - 2. mysql 설치 접속 (0) | 2021.06.26 |
가상머신 virtualbox mysql 설치 - 1. os 우분투 설치 (0) | 2021.06.26 |