Amazon Aurora(MySQL 호환) Auto Scaling에서 추가된 복제본(Reader) 인스턴스의 버퍼 캐시 워밍업은 어떻게 되나요?

9049 단어 MySQL오로라AWS
  • Amazon Aurora의 복제본과 버퍼 캐시 워밍업 간의 관계를 확인했습니다.
  • Amazon Aurora의 장애 시뮬레이션과 버퍼 캐시 유지(웜업)의 관계를 확인해 보았습니다.

  • …라고 오면, 역시 Auto Scaling에서 추가된 레플리카(Reader) 인스턴스의 버퍼 캐쉬(버퍼 풀·버퍼 풀 캐쉬)가 기동시에 웜업 되는지,에 대해서도 알고 싶은 곳(?).

    라고 하는 것으로, 좋은 가감 힘들지만, 검증…이라고 하기에는 잡잡한, 확인을 해 보았습니다.

    1. Amazon Aurora(MySQL 호환) Auto Scaling 구성



    평소처럼 이미 클래스 메소드의 Developers.IO에 기사가 있습니다.
  • Amazon Aurora MySQL의 ReadReplica (리드 복제본)로 자동 스케일링을 시도했습니다. (Developers.IO)

  • 고맙고 고맙습니다.

    그래서 내 기사에서는 부분적으로 스크린 샷을 올려 둡니다.

    ※이전, 이하의 기사를 쓸 때 사용한 스냅샷으로부터 인스턴스를 복원해 사용했습니다.
  • Amazon Aurora(MySQL 호환)로 Asynchronous Key Prefetch 3/해결편

  • 클러스터 화면에서 Auto Scaling 정책을 추가하려고 할 때,


    새로운 콘솔에 초대하고,


    앞으로 나아가면 익숙하지 않은 화면이.


    Auto Scaling을 설정하려면 새 콘솔에서도 클러스터 화면에서.
    쉽게 확장할 수 있도록 "평균 활성 연결 수"를 선택하고 "3"활성 연결을 지정합니다.


    우선 Auto Scaling에서 작성된 복제본으로 확인할 수 있으면 좋으므로 상한은 적은 눈으로.


    쓰는 것을 잊었지만 새 Auto Scaling 정책을 추가하기 전에 최소한 하나의 Reader 인스턴스를 만들어야합니다 (그렇지 않으면 화가납니다).

    이제 Auto Scaling을 준비했습니다.

    2. Auto Scaling에서 복제본이 자동으로 추가되도록 부하를 곱합니다.



    계속해서 클라이언트로부터 복수 세션으로 접속합니다(일단 4개 정도).

    우선 연결.

    클라이언트 연결
    $ mysql -u mkadmin -h test-cluster.cluster-ro-xxxxxxxxxxxx.ap-northeast-1.rds.amazonaws.com -p
    Enter password:
    Welcome to the MySQL monitor.  Commands end with ; or \g.
    Your MySQL connection id is 6
    Server version: 5.6.10 MySQL Community Server (GPL)
    
    Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved.
    
    Oracle is a registered trademark of Oracle Corporation and/or its
    affiliates. Other names may be trademarks of their respective
    owners.
    
    Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
    
    (ここで3つ追加接続)
    
    mysql> SHOW PROCESSLIST;
    +----+----------+--------------------+------+---------+------+----------------------+------------------+
    | Id | User     | Host               | db   | Command | Time | State                | Info             |
    +----+----------+--------------------+------+---------+------+----------------------+------------------+
    |  2 | rdsadmin | localhost          | NULL | Sleep   |    2 | delayed send ok done | NULL             |
    |  3 | rdsadmin | localhost          | NULL | Sleep   |    2 | cleaned up           | NULL             |
    |  4 | rdsadmin | localhost          | NULL | Sleep   |   13 | cleaned up           | NULL             |
    |  5 | rdsadmin | localhost          | NULL | Sleep   |  568 | delayed send ok done | NULL             |
    |  6 | mkadmin  | 172.31.21.22:43318 | NULL | Query   |    0 | init                 | SHOW PROCESSLIST |
    |  7 | mkadmin  | 172.31.21.22:43320 | NULL | Sleep   |   99 | cleaned up           | NULL             |
    |  8 | mkadmin  | 172.31.21.22:43322 | NULL | Sleep   |   79 | cleaned up           | NULL             |
    |  9 | mkadmin  | 172.31.21.22:43324 | NULL | Sleep   |    9 | cleaned up           | NULL             |
    +----+----------+--------------------+------+---------+------+----------------------+------------------+
    8 rows in set (0.00 sec)
    

    각 세션에서 SQL을 실행합니다.

    SQL(SELECT) 실행
    mysql> USE akptest2;
    Reading table information for completion of table and column names
    You can turn off this feature to get a quicker startup with -A
    
    Database changed
    mysql> SELECT s.member_id memb, SUM(s.total_value) tval FROM dept d, member m, sales s WHERE d.dept_id = m.dept_id AND m.member_id = s.member_id AND d.dept_name = '部門015' GROUP BY memb HAVING tval > (SELECT SUM(s2.total_value) * 0.0007 FROM dept d2, member m2, sales s2 WHERE d2.dept_id = m2.dept_id AND m2.member_id = s2.member_id AND d2.dept_name = '部門015') ORDER BY tval DESC;
    +-------+---------+
    | memb  | tval    |
    +-------+---------+
    | 28942 | 1530300 |
    | 47554 | 1485800 |
    (中略)
    | 29294 | 1176700 |
    | 70092 | 1176300 |
    +-------+---------+
    41 rows in set (24.33 sec)
    
    (別セッションで)
    
    mysql> SELECT s.member_id memb, SUM(s.total_value) tval FROM dept d, member m, sales s WHERE d.dept_id = m.dept_id AND m.member_id = s.member_id AND d.dept_name = '部門015' GROUP BY memb HAVING tval > (SELECT SUM(s2.total_value) * 0.0007 FROM dept d2, member m2, sales s2 WHERE d2.dept_id = m2.dept_id AND m2.member_id = s2.member_id AND d2.dept_name = '部門002') ORDER BY tval DESC;
    (中略)
    60 rows in set (0.19 sec)
    

    그러면 눈에 띄는 (?) 복제본 인스턴스가 자동으로 추가되었습니다! (수동으로 작성하는 것과 같이, 조금 시간이 걸렸습니다만.)


    ※1번째의 레플리카 인스턴스는 AZ-c에 작성했습니다만, 이쪽은 AZ-a에 추가되었습니다.

    3. 드디어 확인



    그래서 이 인스턴스에 직접 지정으로 접속해 보겠습니다.

    자동 추가된 복제본 인스턴스에 연결
    $ mysql -u mkadmin -h application-autoscaling-d43255f2-e133-4c84-85a1-45478224fdd2.xxxxxxxxxxxx.ap-northeast-1.rds.amazonaws.com -p
    Enter password:
    Welcome to the MySQL monitor.  Commands end with ; or \g.
    Your MySQL connection id is 7
    Server version: 5.6.10 MySQL Community Server (GPL)
    
    Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved.
    
    Oracle is a registered trademark of Oracle Corporation and/or its
    affiliates. Other names may be trademarks of their respective
    owners.
    
    Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
    
    mysql> USE akptest2;
    Reading table information for completion of table and column names
    You can turn off this feature to get a quicker startup with -A
    
    Database changed
    mysql> show variables like 'aurora_server_id';
    +------------------+--------------------------------------------------------------+
    | Variable_name    | Value                                                        |
    +------------------+--------------------------------------------------------------+
    | aurora_server_id | application-autoscaling-d43255f2-e133-4c84-85a1-45478224fdd2 |
    +------------------+--------------------------------------------------------------+
    1 row in set (0.01 sec)
    

    자, 드디어, 버퍼 캐시가 어떻게 되어 있는지, 확인입니다!
    처음에 발행한 것과 같은 SQL을 발행해 보겠습니다.
    버퍼 캐시에 실려 있으면, 1초 미만으로 실행할 수 있을 것입니다만….

    추가 인스턴스에서 확인
    mysql> SELECT s.member_id memb, SUM(s.total_value) tval FROM dept d, member m, sales s WHERE d.dept_id = m.dept_id AND m.member_id = s.member_id AND d.dept_name = '部門015' GROUP BY memb HAVING tval > (SELECT SUM(s2.total_value) * 0.0007 FROM dept d2, member m2, sales s2 WHERE d2.dept_id = m2.dept_id AND m2.member_id = s2.member_id AND d2.dept_name = '部門015') ORDER BY tval DESC;
    +-------+---------+
    | memb  | tval    |
    +-------+---------+
    | 28942 | 1530300 |
    | 47554 | 1485800 |
    (中略)
    | 29294 | 1176700 |
    | 70092 | 1176300 |
    +-------+---------+
    41 rows in set (24.71 sec)
    

    죄송합니다! !
    … 음, 예상대로군요.

    연결을 끊고 잠시 기다리면 자동으로 추가된 인스턴스가 삭제됩니다.


    ※내가 시도했을 때는, 설정한 시간보다 훨씬 긴 시간이 경과하고 나서 삭제가 시작되었습니다. 안전을 보고 있나요?

    그런데, 프록시가 사이에 들어가 컨테이너(아마)로 DB 노드가 구성되는 Amazon Aurora Serverless에서는, 어떻게 될까요?

    12/15 추가:

    확인한 결과, DB 노드는 「기동 상태의 통상 인스턴스를, 필요에 따라서 스토리지 노드에 붙이거나 떼어내거나 한다」방식이라고 하므로, 생각하고 있었던 것과 구조가 달랐습니다.

    매번 DB 인스턴스와 스토리지 노드의 대응 관계가 바뀌므로 버퍼 캐시의 워밍업도하지 않는 것 같습니다.

  • Qiita에 게시한 Amazon Aurora 관련 기사
  • 좋은 웹페이지 즐겨찾기