programing

마리아에서 많은 업데이트를 사용하여 SQL 스크립트 진행률 모니터링DB

yellowcard 2023. 9. 2. 08:10
반응형

마리아에서 많은 업데이트를 사용하여 SQL 스크립트 진행률 모니터링DB

다음과 같은 수백만 개의 업데이트 문이 있는 스크립트를 실행하고 있습니다.

UPDATE data SET value = 0.9234 WHERE fId = 47616 AND modDate = '2018-09-24'  AND valueDate = '2007-09-01'  AND last_updated < '2018-10-01';

fId, modDate 및 valueDate는 데이터 테이블의 복합 기본 키의 세 가지 구성 요소입니다.

처음에 이 프로그램을 실행했습니다.AUTOCOMMIT=1하지만 제가 생각하기엔 더 빨라질 것 같아서요AUTOCOMMIT=0그리고 거래를 25개의 블록으로 묶었습니다.

자동 커밋 모드에서는SHOW PROCESSLIST출력에 UPDATE 문이 표시되므로 fId 외래 키를 통해 스크립트가 어디까지 진행되었는지 알 수 있습니다.

하지만 자동 커밋 없이, 지금 실행되는 것을 보면서, 나는 아무것도 보지 못했습니다.SHOW PROCESSLIST바로 이것:

610257  schema_owner_2  201.177.12.57:53673  mydb  Sleep   0               NULL                    0.000
611020  schema_owner_1  201.177.12.57:58904  mydb  Query   0       init    show processlist        0.000

Sleep상태는 시스템의 다른 사용자가 업데이트를 차단하는 것을 편집증적으로 만듭니다. 하지만 실행하면SHOW OPEN TABLES문제가 있는지 확실하지 않습니다.

MariaDB [mydb]> SHOW OPEN TABLES;
+----------+----------------+--------+-------------+
| Database | Table          | In_use | Name_locked |
+----------+----------------+--------+-------------+
| mydb     | data           |      2 |           0 |
| mydb     | forecast       |      1 |           0 |
| mydb     | modification   |      0 |           0 |
| mydb     | data3          |      0 |           0 |
+----------+----------------+--------+-------------+

내 대본이 영원히 기다릴까요?자동 커밋 모드로 돌아가야 합니까?어디까지 진행되었는지 알 수 있는 방법이 있습니까?업데이트를 위해 데이터를 검사할 수 있을 것 같지만, 그것을 종합하는 것은 힘들 것 같습니다.

  • 실제로 데이터를 확인하여 진행 상황을 확인합니다.
  • 당신이 하고 있다고 생각합니다.COMMIT?
  • 아무것도 보지 않는 것이 합리적입니다 -- 각각.UPDATE몇 밀리초가 걸릴 것이다; 있을 것이다.Sleep사이의 시간UPDATEs.
  • Time존재0그것이 진행되고 있다는 당신의 단서입니다.
  • 앞으로 어떤 단서도 없을 겁니다PROCESSLIST얼마나 멀리 갔는지에 대한 것.
  • 추가할 수 있습니다.SELECT SLEEP(1), $fid;$165(또는 무엇이든)가 마지막인 루프에서UPDATEd행 ID.그러면 진행 속도가 25개 행당 1초씩 느려지기 때문에 100개 또는 500개 그룹으로 구성해야 합니다.

언급URL : https://stackoverflow.com/questions/52628184/monitoring-progress-of-a-sql-script-with-many-updates-in-mariadb

반응형