mysql

MySQL table definition cache LRU Maintenance

MySQL InnoDB table definition cache LRU Maintenance

InnoDB에서는 table definition cache를 server(frm) 와 engine level(InnoDB system table)에서 모두 관리합니다. sql을 실행할때마다, table definition 을 접근해야합니다. 이것을 frm file이나 system table에서 매번 가져와야한다면 엄청 느리겠지요. 그래서 MySQL은 이를 캐시하는 영역이 있습니다. table definition cache. 이를 어떻게 관리하는지 설명합니다.

MySQL에서 null safe equal operator (<=>)


개요

  • SQL에서 NULL과의 모든 연산은 NULL을 반환한다. NULL은 아직 할당되지 않은 값이기 때문이다. 이를 피하기 위해 ifnull과 같은 함수를 사용하기도 하지만 모든 nullable column을 비교하기위해 해당 function을 사용하는것은 꽤나 귀찮은 일이다. 이때문에 MySQL은 <=>라는 연산자를 제공한다.

MySQL 디버깅을 위한 Docker 안에서 MySQL Source 설치하기


주의사항

  • 해당 스크립트는 MySQL Debugging 을 위해 debug버젼을 compile하는데 목적이 있음으로 OS root유저로 진행한다. 사용을 위해서는 정상적인 절차 (mysql user 생성 / systemd 등록..) 를 진행한다.
  • 5.7 과 8.0은 명령어가 조금 다른데, 해당이유는 8.0을 compile 하기 위해서는 cmake 버젼과 gcc 버젼을 올려줘야 한다.
  • cmake >= 3.0
  • GCC >= 4.8 (C++ 11) (MySQL 5.7의 경우, GCC >= 4.4)
  • 8.0 compile시, fatal error: ld terminated with signal 9 [Killed] 라는 에러가 발생했는데 이는 docker가 사용했던 메모리가 부족 (2GiB)하여 발생되었다. oom 세팅과 메모리를 4GiB로 올린 후 문제는 발생하지 않았다.
  • windows 는 깔끔하게 mysql_debug binary를 받아서 사용하면 된다. :-)

Docker를 이용한 MySQL RPM 설치 및 기타 Tool 설치


명령어 모음

OS 명령어

Docker로 centos 이미지 만들기

docker search centos
docker pull centos
docker images -a
docker run -dit --hostname C7_M8017 --name centos7_mysql8017 centos
docker container ls -a
docker exec -it centos7_mysql8017 /bin/bash

Alter table시 소요시간 예측해보기

개요

* Alter table 명령어를 실행하고 나면, 현재 진행상황이 어느정도인지 궁금할때가 있다.
 일반적으로 파일사이즈나 show engine innodb status를 통해 가늠해볼 수는 있지만, 정확한 값은 아니며 때로는 여러단계에서 같은 작업을 진행함으로 현재 작업을 얼마나 더 해야 하는지 예상하기 쉽지 않다.
 MySQL 5.7부터는 Performance_schema 를 이용하여, Alter 명령어에 대해 모니터링을 할 수 있다.

MySQL decimal type 제대로 알고 사용하기

decimal type 제대로 알고 사용하기

mysql에서 실수를 표현할때는 보통 decimal 혹은 double을 사용하게 된다. 이 둘의 차이점이 무엇이고, decimal 을 사용하는 경우에 주의할 점을 기술한다.

MySQL explicit_defaults_for_timestamp

explicit_defaults_for_timestamp 에 대해서

[Warning] TIMESTAMP with implicit DEFAULT value is deprecated. Please use –explicit_defaults_for_timestamp server option (see documentation for more details).

MySQL Read Committed vs. Repeatable Read

Read Committed vs. Repeatable Read

  • MySQL의 Isolation level은 전통적으로 Repeatable Read 를 default로 한다.
  • 하지만 반드시 repeatable read가 필요한 경우에만 lock을 사용하고 그외에서는 committed 를 봐도 무방하다면, 다른 RDBMS와 같이 Read committed를 default Isolation level로 하는 건 어떨까.
  • 막연하게 Read Committed가 lock contention이 더 줄고, 동시성에 더 좋을 것 같다.
  • 그리고 Repeatable read 에서 long running query (혹은 슬프게도 transaction이 제대로 close되지 않아서)가 돌때 undo가 너무 많이 쌓여서 전체적으로 성능에 영향을 주는 상황도 회피할 수 있다.

MTS considerations

MTS considerations

Multi-threaded slave(MTS)를 통해서 slave delay를 줄일수 있을까.

  • → YES. https://mysqlhighavailability.com/multi-threaded-replication-performance-in-mysql-5-7/
  • 실제로 slave delay가 발생하는 시스템에서 MTS on/off test결과 효과적인 것을 확인 할 수 있었다.
Back to Top ↑

mysql_tips

Back to Top ↑

mysql8

Alter table시 소요시간 예측해보기

개요

* Alter table 명령어를 실행하고 나면, 현재 진행상황이 어느정도인지 궁금할때가 있다.
 일반적으로 파일사이즈나 show engine innodb status를 통해 가늠해볼 수는 있지만, 정확한 값은 아니며 때로는 여러단계에서 같은 작업을 진행함으로 현재 작업을 얼마나 더 해야 하는지 예상하기 쉽지 않다.
 MySQL 5.7부터는 Performance_schema 를 이용하여, Alter 명령어에 대해 모니터링을 할 수 있다.
Back to Top ↑

mysql_internal

MySQL Read Committed vs. Repeatable Read

Read Committed vs. Repeatable Read

  • MySQL의 Isolation level은 전통적으로 Repeatable Read 를 default로 한다.
  • 하지만 반드시 repeatable read가 필요한 경우에만 lock을 사용하고 그외에서는 committed 를 봐도 무방하다면, 다른 RDBMS와 같이 Read committed를 default Isolation level로 하는 건 어떨까.
  • 막연하게 Read Committed가 lock contention이 더 줄고, 동시성에 더 좋을 것 같다.
  • 그리고 Repeatable read 에서 long running query (혹은 슬프게도 transaction이 제대로 close되지 않아서)가 돌때 undo가 너무 많이 쌓여서 전체적으로 성능에 영향을 주는 상황도 회피할 수 있다.
Back to Top ↑

postgres

Back to Top ↑

mysql_replication

MTS considerations

MTS considerations

Multi-threaded slave(MTS)를 통해서 slave delay를 줄일수 있을까.

  • → YES. https://mysqlhighavailability.com/multi-threaded-replication-performance-in-mysql-5-7/
  • 실제로 slave delay가 발생하는 시스템에서 MTS on/off test결과 효과적인 것을 확인 할 수 있었다.
Back to Top ↑

mongo

Back to Top ↑

mysql_partitioning

Back to Top ↑

performance_schema

Back to Top ↑

mysql_variables

MySQL explicit_defaults_for_timestamp

explicit_defaults_for_timestamp 에 대해서

[Warning] TIMESTAMP with implicit DEFAULT value is deprecated. Please use –explicit_defaults_for_timestamp server option (see documentation for more details).

Back to Top ↑

oracle

Back to Top ↑

postgres_migration

Back to Top ↑

mysql_utilities

Back to Top ↑

mysql_cluster

Back to Top ↑

postgres_replication

Back to Top ↑

mysql_bug

Back to Top ↑

mysql_engine

Back to Top ↑

mysql_index

Back to Top ↑

postgres_parameters

Back to Top ↑

postgres_lock

Back to Top ↑

postgre_intenal

Back to Top ↑

mysql_explain

Back to Top ↑

mysql_innodb

Back to Top ↑

mysql_fabric

Back to Top ↑

mysql_backup

Back to Top ↑

postgres_tool

Back to Top ↑

postgres_intenal

Back to Top ↑

mysql_innodb_cluster

Back to Top ↑

mysql_data_type

MySQL decimal type 제대로 알고 사용하기

decimal type 제대로 알고 사용하기

mysql에서 실수를 표현할때는 보통 decimal 혹은 double을 사용하게 된다. 이 둘의 차이점이 무엇이고, decimal 을 사용하는 경우에 주의할 점을 기술한다.

Back to Top ↑

mysql_character_set

Back to Top ↑