생계/MySQL2021. 8. 2. 15:14

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 은 필히 바꿀 필요가 있다. 

반응형
Posted by 돌고래트레이너
생계/MySQL2021. 7. 31. 13:44

mysql 을 설치 직후 디폴트로 세팅된 변수 값들 중 무엇을 바꾸는게 좋을지 알아보자. 

여기에 나온 예시는 내가 경험해보니 바꿔야 함을 느낀 것들이다. 

사이트 환경은 저마다 다르니 그냥 참고해서 취할건 취한고 아니면 패스 하시길..

 

1. time out

 - interactive_timeout
  : 콘솔에서 mysqld와 Client의 connection 후 다음요청을 기다리는 시간

 - wait_timeout
  : 플러그인, API 등을 이용해 (PHP, JDBC) connection 후 다음요청을 기다리는 시간

   디폴트가 28880 인데 시간으로 환산하면 8시간이 넘는다.

  보통 운영을 이렇게 길게 설정할 필요는 없다.

  lock 을 잡고 sleep 에 빠지는 세션을 줄이기 위해서라도 조정은 필요하다. 

 

2. auto commit

 디폴트는 오토커밋이다. 

 오라클의 디폴트는 오토커밋을 하지 않는것이다.

여기에 익숙해져서 mysql 도 오토커밋을 안하는 것으로 변경을 고려해볼수 있다. 

 다만 mysql 은 select 후에 commit 을 하지 않으면 다른 세션에서 해당 테이블에 DDL 을 날리면 대기에 빠질수있다. 

 

3. 테이블 대소문자 구분 

lower_case_table_names 이라는 변수로 테이블명을 소문자로 바꾸는 것을 세팅할수 있다.

리눅스, 유닉스의 디폴트는 0 이고, 테이블명의 대소문자를 구분 하겠다는 뜻이다. 

Create table Abc ( a int);

Create table abc ( a int);

이런식으로 테이블 생성시 중복 에러 없이 생성이 된다.   

mysql> show variables like 'lower%';
+------------------------+-------+
| Variable_name          | Value |
+------------------------+-------+
| lower_case_file_system | OFF   |
| lower_case_table_names | 0     |
+------------------------+-------+
2 rows in set (0.00 sec)

lower_case_table_names = 0  :  테이블 생성 및 조회 시 대·소문자 구분한다.
lower_case_table_names = 1  :  테이블명이 모두 소문자로 변경된다. 
lower_case_table_names = 2  :  윈도우에서 대·소문자를 구분해서 테이블생성

윈도우는 1, 맥킨토시는 2 가 디폴트

 

대소문자를 구별했을때의 문제는 쿼리에서 table 이름을 대소문자 그대로 똑같이 입력해야 한다. 

그리고 윈도우에서 파일 시스템이 대소문자를 구분하지 않아서 문제가 발생할수 있다. 

## 이 설정과 상관없이 쿼리에서 alias 를 줄 경우, mysql 은 대문자면 대문자, 소문자면 소문자 그대로 써야 한다. 

select *  from abc A where A.col1 = '1'  (O)

select *  from abc A where a.col1 = '1'   (X)

 

4. isolation level 

디폴트는 repeatable read 이다. 

트랜잭션의 안정성과 동시성은 양립할수 없다. (lock 매커니즘을 사용한다면)

각 사이트 환경에 따라 적절한 트랜잭션 고립 레벨을 고려해볼수 있겠으나

보통 oracle 환경이 READ COMMITTED 였기 때문에 변경을 고려해볼수 있다. 

 

아래는 4가지 transaction isolation level 이다. 

1) read uncommitted 

   => dirty read 가능

2) read committed

   => non-repeatable read 가능

3) repeatable read

   => phantom read 가능 

4) serializable

 

반응형
Posted by 돌고래트레이너

아주 오래전 (대략 2013 즈음) 인터넷을 떠돌다가 한 흑형 쿨가이의 글을 발견했었다. 

인상깊은 글이라 따로 발췌해놨었는데, 최근 우연히 다시 보게 되었다. 

다시 봐도 괜찮은 글 같아서 블로그에 한번 올려본다. 

 

관계에 어려움이나 안좋은 감정을 가지고 있던 사람에게 지나가는 글로 한 흑형이 남겼던 글이다. 

My rule when it comes to relationship

offense (mostly focusing on trying)

1. trying to be easygoing
  do not take something seriously
  just trying and do not regret or ashamed of it

2. use timely humor, try to break the ice first

3. don't be afraid of trying
  once I achieve a goal then it could make to forget 10 failures.


defense (mostly regarding mind control)

1. no deep attachment
  even if you stand out for more than an hour, just keep calm and do not call or text them too much
  
2. forgive
  There is nothing unforgivable. just try to forgive and do not pretend that I've done big decision.
  There would be certain moment that they would respect my personality or the moment that I should discard them without a doubt
  Even if I decided to discard them, do not trun them to my enemies.
  try it without emotional hurt. beating around bush.
 

간략하게 요약하면 

느긋함을 유지, 심각하게 받아들이지 않기.

그냥 시도해보기 그리고 그것에 대해 후회 또는 부끄러워하지 않기

적절한 유머를 사용, 어색함을 깨기위해 노력해라

집착하지 않기, 1시간 이상 기다려도 문자나 전화하지 않고 침착함을 유지하기

용서하는것. 세상에 용서하지 못할것은 없다. 용서했다면 마치 대단한 결정을 한듯 굴지 않기.

 혹은 절교, 손절을 하게될때가 오는데, 그렇더라도 그들을 적으로 돌리지 않기.

 

원글은 연인과의 관계에 포커스를 맞춘 것인데, 비단 연인 뿐만 아니라 인간관계에 확대 적용되는 부분들이 있다. 

장황하지 않고 심플하면서도 요점만 갖춘 글이라 두고두고 되새겨 볼만한다. 

물론 마지막에 언급한 용서라는거.. 쉽지 않은 일이다. 

 

반응형
Posted by 돌고래트레이너