it-source

Postgre에 비해 얼마나 큰가.SQL 테이블?

criticalcode 2023. 5. 1. 21:28
반응형

Postgre에 비해 얼마나 큰가.SQL 테이블?

저는 저희 회사에서 RoR 프로젝트를 위한 디자인 작업을 하고 있는데, 저희 개발팀은 이미 디자인, 특히 데이터베이스에 대한 약간의 논쟁에 부딪혔습니다.

우리는 다음과 같은 모델을 가지고 있습니다.Message그것은 지속될 필요가 있습니다.이 모델은 매우 매우 작은 모델로 id 이외에 3개의 db 열만 있습니다. 하지만 실제 가동에 들어가면 이 모델들이 많이 있을 것입니다.우리는 하루에 100만 개나 되는 삽입물을 보고 있습니다.모델은 인덱스할 수 있는 두 개의 외부 키로만 검색됩니다.또한, 모델들은 절대 삭제할 필요가 없지만, 우리는 또한 모델들이 3개월 정도 지나면 보관할 필요가 없습니다.

Postgres에서 이 표를 구현하면 성능 문제가 크게 발생할 수 있는지 궁금합니다.이 문제가 발생할지 여부를 알려줄 대규모 SQL 데이터베이스에 대한 경험이 있는 사람이 있습니까?그리고 만약 그렇다면, 우리는 어떤 대안을 가지고 가야 합니까?

테이블당 행 수는 자체적으로 문제가 되지 않습니다.

그래서 대략 90일 동안 하루에 100만 줄을 말하는 것은 9천만 줄입니다.포스그레스가 당신이 하는 일에 대한 모든 세부사항을 알지 못한 채 그것을 처리할 수 없는 이유를 모르겠습니다.

데이터 배포에 따라 인덱스, 필터링된 인덱스 및 테이블 파티셔닝을 함께 사용하여 성능 문제를 확인한 후 속도를 높일 수 있습니다.당신의 문제는 제가 알고 있는 다른 RDMS에서도 동일할 것입니다.데이터를 제거하는 프로세스에 3개월 분량의 데이터 설계만 필요하면 더 이상 필요하지 않습니다.이렇게 하면 테이블에 데이터 볼륨이 일정하게 표시됩니다.얼마나 많은 데이터가 존재하는지 알고 볼륨을 테스트하여 무엇을 얻을 수 있는지 확인할 수 있다면 다행입니다.9천만 개의 행이 있는 테이블 하나를 테스트하는 것은 다음과 같이 쉽습니다.

select x,1 as c2,2 as c3
from generate_series(1,90000000) x;

https://wiki.postgresql.org/wiki/FAQ

Limit   Value
Maximum Database Size       Unlimited
Maximum Table Size          32 TB
Maximum Row Size            1.6 TB
Maximum Field Size          1 GB
Maximum Rows per Table      Unlimited
Maximum Columns per Table   250 - 1600 depending on column types
Maximum Indexes per Table   Unlimited

행 수가 1억 개 이상인 테이블에서 쿼리 속도를 크게 높이는 또 다른 방법은 쿼리에서 가장 자주 사용되는 인덱스의 테이블을 클러스터링하는 것입니다.데이터베이스의 "사용하지 않는" 시간에 이 작업을 수행합니다.우리는 2억 1,800만 행 이상의 테이블을 보유하고 있으며 30배 향상된 성능을 발견했습니다.

또한 매우 큰 테이블의 경우 외부 키에 색인을 작성하는 것이 좋습니다.

예:

  1. ccbank라는 이름의 데이터베이스에 투자라는 이름의 테이블이 있다고 가정합니다.
  2. 쿼리에 가장 많이 사용되는 인덱스는 (bankid, record_date)라고 가정합니다.

다음은 인덱스를 만들고 클러스터링하는 단계입니다.

  1. psql -c "drop index investment_bankid_rec_dt_idx;" ccbank
  2. psql -c "create index investment_bankid_rec_dt_idx on investment(bankid, record_date);"
  3. psql -c "cluster investment_bankid_rec_dt_idx on investment;"
  4. vacuumdb -d ccbank -z -v -t investment

1-2단계에서는 이전 인덱스를 최적화된 새 인덱스로 바꿉니다.3단계에서는 테이블을 클러스터링합니다. 기본적으로 DB 테이블을 인덱스의 물리적 순서로 배치하여 Postgre가 실행될 때SQL은 가장 가능성이 높은 다음 행을 캐시하는 쿼리를 수행합니다.4단계에서는 데이터베이스를 진공 청소하여 쿼리 플래너의 통계를 재설정합니다.

언급URL : https://stackoverflow.com/questions/21866113/how-big-is-too-big-for-a-postgresql-table

반응형