programing

마리아에서 60GB 이상의 테이블에서 기본 SQL 쿼리도 실행DB

stoneblock 2023. 8. 17. 20:34

마리아에서 60GB 이상의 테이블에서 기본 SQL 쿼리도 실행DB

저는 웹 사이트 모음 전체에서 효율적으로 사용할 수 있도록 웹 외부 서비스의 데이터를 집계하는 수십 개의 데이터베이스 테이블(기본적으로 데이터베이스 캐슁이 포함된 API 계층이며 모든 프로젝트에서 쉽게 사용할 수 있는 자체 API)을 갖춘 vServer(8 CPU vCore, 32GB RAM)에서 MariaDB를 실행하고 있습니다.

이러한 데이터베이스 테이블 중 하나를 제외한 모든 데이터베이스 테이블은 다음과 같은 기본 쿼리를 허용합니다.

SELECT id, content FROM tablename WHERE date_added > somedate

("콘텐츠"는 일부 JSON 데이터와 함께)테이블 잠금 없이 삽입할 수 있도록 InnoDB를 스토리지 엔진으로 사용하고 있습니다. "id"는 항상 모든 테이블의 기본 키이며, 대부분의 테이블에는 몇 천 개 또는 몇 십만 개의 항목만 있으므로 수백 MB가 됩니다.

이미 600만 개 이상의 항목(잠재적으로 1억 개로 향하는 항목)이 있고 인덱스를 포함하여 60GB 이상을 사용하지만 제대로 작동하지 않는 한 테이블."id"로 삽입, 업데이트 및 선택할 수 있지만 더 복잡한 것(예: 1~2개의 추가 필드에서 검색 또는 결과 정렬)은 무한대로 실행됩니다.예:

SELECT id FROM tablename WHERE extra = ''

이 쿼리는 "추가"가 비어 있는 항목을 선택합니다."추가"에 색인이 있고,

EXPLAIN SELECT id FROM tablename WHERE extra = ''

올바른 인덱스가 자동으로 선택된 단순 쿼리("위치 사용, 인덱스 사용")라는 메시지가 나타납니다.낮은 LIMIT를 설정하면 수천 개의 결과를 선택해도 문제가 없고 쿼리 실행이 멈추지 않습니다.결합된 인덱스를 사용하더라도 검색에서 하나 이상의 필드를 사용하고 해당 인덱스의 이름을 쿼리에 명시적으로 추가하면 저도 운이 없습니다.

내 vServer 및 MariaDB/InnoDB에는 사용 가능한 스토리지가 충분하지 않으며 테이블에 대한 크기 제한이 없기 때문에 더 큰 데이터베이스 테이블에서 쿼리를 실행할 수 없는 설정이나 기타 제한이 있을 수 있습니다.MariaDB의 모든 설정을 살펴보았지만 적절한 것을 찾을 수 없었습니다.

누군가가 나에게 올바른 방향을 알려준다면 기쁠 것입니다.

언급URL : https://stackoverflow.com/questions/61408370/running-even-basic-sql-queries-on-a-60-gb-table-in-mariadb