MySQL의 메타 정보를 BigQuery에 모아 시각적으로 표시
...응?
투고 날짜 안 썼어요?
괜찮아, 그렇게 사소한 일.
일부러 지적하지 않으면 아무도 눈치채지 못할 텐데..
"나는 직감이 좋은 아이를 싫어한다."
(이미지 생략)
순서
수년 단위로 장기적으로 활용되는 서비스는 데이터베이스의 데이터량에 점점 신경을 쓴다.
디스크 용량 부족, 메모리 부족으로 성능 저하
MySQL에서 AutoIncreament 열의 데이터 형식이 부주의로 32비트 int로 바뀌었습니다
눈치채면 상한선(signed면 약 21억, unsigned면 약 42억)이 가까워진다.
그런 데이터의 양을 신경 쓸 때 MySQL이면
SHOW TABLE STATUS;
표별 기록수(매뉴얼에도 있지만 이 값은 InnoDB 엔진의 근사값으로 정확한 값이 아니다), 데이터 용량, 현재의 AutoIncreament 값 등이다.하지만
이 데이터는 단지 그 조회의 시간치를 두드리고 있을 뿐이다.
DB를 활용하는 입장에서.
"이 책상은 어떤 속도로 데이터를 늘립니까?"
나는 이 점이 매우 마음에 든다.
이걸 알면 언제쯤 메모리 증설 같은 게 필요할까
이 시계는 비대하게 발전하려고 하기 때문에 약간의 처리가 필요하다
이렇게 하면 어느 정도 읽을 수 있다.
이렇게 되면 정기적으로 두드려서
SHOW TABLE STATUS;
결과를 어딘가에 두면 된다.그럼, 여기까지라면 사실 계발된 기사가 있어요
MySQL 근처에 익숙한 Yooku0825의 항목:
상기 보도에서 저장된 데이터를 다른 MySQL DB에 넣고 ASCII 도표를 만든다
볼륨 데이터 로더의 Embulk 및
DWHBigQuery로 많이 쓰니까요.
이 프로세스에 MySQL의 메타데이터를 추가하여 수집하는 것도 좋지 않습니까?내 생각엔
MySQL에서 BigQuery로 메타데이터를 전송하는 Embalk 설정 파일
프로필은 이런 느낌입니다.
SQL 조회는 거의 Yooku0825의 글입니다.
저도 AutoIncreament 값을 원해서 그걸 추가했어요.
mysql_meta_tables.yml
in:
type: mysql
host: somehost
user: someuser
password: somepassword
database: information_schema
options:
useLegacyDatetimeCode: false
serverTimezone: Asia/Tokyo
characterEncoding: utf8mb4
query: |
SELECT
table_schema,
table_name,
table_rows,
data_length,
index_length,
data_free,
auto_increment,
NOW() AS last_update
FROM
tables
WHERE
table_schema NOT IN ('mysql', 'information_schema', 'performance_schema', 'sys') AND
table_type = 'BASE TABLE'
out:
type: bigquery
# auth_method: 認証情報なのでブログ上では省略
location: asia-northeast1
compression: GZIP
default_timezone: Asia/Tokyo
project: awesome_project
dataset: mysql_meta
mode: append
table: i_s_tables
column_options:
- name: table_schema
type: STRING
- name: table_name
type: STRING
- name: table_rows
type: INTEGER
- name: data_length
type: INTEGER
- name: index_length
type: INTEGER
- name: data_free
type: INTEGER
- name: auto_increment
type: INTEGER
- name: last_update
type: TIMESTAMP
crontab에서 매일 정기적으로 실행됩니다.0 4 * * * cd /path/to/project; embulk run mysql_meta_tables.yml
이렇게 하면 데이터를 얻을 수 있다.시각화
그리고 빅Query이기 때문에 데이터 포털과 쉽게 협업할 수 있기 때문에 시각적으로 만들어 보려고 한다.
일단 Table Rows의 TOP20입니다.
Auto Increament의 TOP20
이렇게 되면'매일 얼마나 늘었는지'몰라요.
나는 매일의 추이를 보고 싶다
직접 실수로 도표를 만들면 도표가 잘 보이지 않기 때문에'전날과의 차이점'값을 도표화한다.
이렇게 하려면 BigQuery 옆에 View를 만듭니다.
윈도 함수를 사용하면 데이터에도 전날과의 차이가 포함되어 있다.
SELECT
DATE_SUB(DATE(last_update, 'Asia/Tokyo'), INTERVAL 1 DAY) AS target_date,
table_schema,
table_name,
table_rows,
table_rows - LAG(table_rows) OVER (PARTITION BY table_schema, table_name ORDER BY last_update) AS table_rows_delta,
data_length,
data_length - LAG(data_length) OVER (PARTITION BY table_schema, table_name ORDER BY last_update) AS data_length_delta,
index_length,
index_length - LAG(index_length) OVER (PARTITION BY table_schema, table_name ORDER BY last_update) AS index_length_delta,
data_free,
auto_increment,
auto_increment - LAG(auto_increment) OVER (PARTITION BY table_schema, table_name ORDER BY last_update) AS auto_increment_delta
FROM `mysql_meta.i_s_tables`
이 AutoIncreament 값의 매일 증가량을 이용한 도표가 여기에 있다.'증가량'의 도표이기 때문에 이 도표가 상승세를 보이면 데이터 양이 급격히 증가한다.
변하지 않는다면 기본적으로 일정한 속도다.
12월 20일 데이터 증가량이 적은 것은 일요일에 창고가 출고하지 않았기 때문이다.
총결산
MySQL
SHOW TABLE STATUS;
정보를 Embalk에서 BigQuery로 이동데이터 포털 사이트에서 시각화된 곳을 소개했다.
그리고 이 정보를 정기적으로 슬랙에게 전달하는 거예요.
기타 정보 -schema와performanceschema의 정보
왜냐하면 시간 순서가 있으면 유용한 정보가 있을 거예요.
나는 나를 충실하게 하고 싶다.
Reference
이 문제에 관하여(MySQL의 메타 정보를 BigQuery에 모아 시각적으로 표시), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://zenn.dev/m_norii/articles/ebfae448ece797텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)