https://eng.uber.com/mysql-migration/ 글을 읽었습니다. Postgres의 단점을 매우 잘 정리한 글입니다. 사실 이 글은 아래 그림 한 장으로 요약할 수 있습니다.

이미지

읽고 난 뒤 정리한 메모를 최대한 짧게 줄이면 다음과 같습니다.

항목 PostgreSQL MySQL (InnoDB)
secondary index directly indirectly
secondary key lookup 유리 불리 (index 2개를 찾아야 하니)
row update 시 모든 index 업데이트 해당 row의 index만 업데이트
replication WAL을 보냄 commands를 보냄
MVCC row를 항상 씀 변경전 row를 rollback segment에 복사.
cache OS의 page cache buffer pool
connection conn 당 process 생성 conn 당 thread 생성
upgrade downtime 필요. downtime 없이 가능.

덧붙이는 말입니다.

이 글에는 Postgres의 단점만 적혀 있습니다. 그러나 Postgres가 tuple 방식의 디자인을 선택한 것은 일종의 tradeoff이고, 장점도 많습니다. 다만 커넥션마다 프로세스를 새로 만드는 방식이 어떤 장점이 있는지는 아직 잘 모르겠습니다. 제가 모르는 이유가 있을 텐데, 어떤 기술을 비판하는 일은 결국 무지에서 비롯되는 경우가 많아 조심하려고 합니다.