저는 Python Django를 사용하여 postgresql db에 측정 데이터를 저장하려고합니다. 지금까지 모두 좋았습니다. django로 도커 컨테이너를 만들었고, postgresql 서버로 도커 컨테이너를 만들었습니다. 그러나 측정 테이블에서 2M 행에 가까워지고 쿼리가 실제로 느려지 기 시작합니다. 그 이유는 확실하지 않지만 매우 집중적 인 쿼리를 수행하지는 않습니다. 예PostgreSQL 쿼리 속도가 느립니다. 무엇이 문제입니까?
이 쿼리
SELECT ••• FROM "measurement" WHERE "measurement"."device_id" = 26 ORDER BY "measurement"."measure_timestamp" DESC LIMIT 20
제가 질의하는 장치에 따라 실행하는 3 내지 5 초 걸린다.
내가 더 멋진 일을하지 않기 때문에 나는 이것이 훨씬 더 빨리 달릴 것으로 기대한다. ID 및 measure_timestamp에 인덱스를 이용한 측정 테이블
id INTEGER
measure_timestamp TIMESTAMP WITH TIMEZONE
sensor_height INTEGER
device_id INTEGER
. 서버가 너무 바빠 보이지 않습니다. 512M 메모리 일지라도 쿼리 중에 많은 시간이 남아 있습니다.
shared_buffers = 256MB 및 work_mem = 128MB로 postgresql 서버를 구성했습니다. 총 데이터베이스가 100MB 미만이므로 쉽게 맞아야합니다. PgAdmin에서 쿼리를 실행하면 많은 수의 I/O가 표시되므로 디스크에서 읽어야 할 것으로 의심됩니다. 이는 분명히 느립니다.
아무도 올바른 방향으로 몇 가지 방법으로 문제를 찾을 수 있습니까?
EDIT : 쿼리에 대한 explain 분석 결과가 추가되었습니다. device_id에 인덱스를 추가했는데 많은 도움이되었습니다.하지만 쿼리 시간이 더 빨라질 것으로 예상됩니다. https://pastebin.com/H30JSuWa
쿼리에'EXPLAIN (ANALYZE, BUFFERS)'를 실행하고 질문에 결과를 추가하십시오. 그것은 추측에 근거하지 않은 답을주는 데 도움이 될 것입니다. –
또한 PK FK 및 색인을 포함하여 테이블 정의를 질문에 추가하십시오. 그리고 카디널리티와 같은 데이터의 일부 discription. – joop