no image
postgresql 전체 테이블 count 수 찾기 / select count(*) 말고
보통 특정 테이블의 row count 수를 알고 싶을 때 SELECT count(*) FROM {schema}.{tableName}; 의 쿼리를 사용했을 것이다. 본론만 말하자면 SELECT schemaname, relname, n_live_tup FROM pg_stat_user_tables -- where schemaname = '{schemaname}' ORDER BY n_live_tup DESC; 이 쿼리를 사용하면 거의 1~2초만에 결과를 얻을 수 있다. where문은 해당하는 스키마의 테이블들만 볼 수 있는 쿼리고 없애면 전체 데이터베이스의 테이블들을 볼 수 있다. postgresql count 속도는 왜 느린가? postgresql의 어떤 속성인지는 모르겠으나 count(*) 속도가 정말 정말..
2022.09.05
DBeaver postgresql 대용량 csv 한글 깨짐 현상
utf-8인 csv를 dbeaver로 적재했을 때 한글이 깨지게 되는 현상이 나타난다 (pgadmin도 마찬가지) 구글에 찾아보면 csv를 메모장으로 열어서 인코딩을 ANSI -> UTF8로 고친 후에 적재하라고 하는데 나는 레코드가 삼천만 개 정도 되어서 메모장에서 열리지 않는다...... csv 분할도 해 보고 다른 인코딩 방법을 찾았는데 원본 파일 바로 한글 깨지지 않게 적재하는 방법 알아냄 인코딩을 EUC_KR로 바꿔서 하면 된다 ㅎ
2021.07.30
no image
postgresql-x64-12 - PostgreSQL Server 12 서비스가 로컬 컴퓨터에서 시작했다가 중지되었습니다
또 말썽이다....... ETL을 배치 프로그램 이용해서 만들고 있었는데 C#에서 쿼리가 dataset으로 안 받아와지고 해당 오류가 뜨길래 Npgsql.NpgsqlException: 'Exception while reading from stream' TimeoutException: Timeout during reading attempt npgsql timeout during reading attempt 무엇인가 하니 forums.servicestack.net/t/postgresql-timeout/6289 해당 주소를 참고하여 서버 문제인 것을 알았다 같이 일하시는 분이 공유기 아이피를 바꿔버림 아 ㅋㅋ 1. 윈도우 + R services.msc 처음에는 postgresql-x64 눌렀을 때 서비스 시작..
2021.07.29
DBeaver 실행 시 오류 log error
dbeaver로 postgresql 작업을 하다가 갑자기 에러창이 뜨면서 log 파일을 확인하라는 메세지가 떴다. ide 켜지지도 않고 이유 찾아보다가 포기하고 이틀 정도 그냥 pgadmin으로 작업한 듯...... 이대로는 안 되겠다 싶어서 구글링으로 다시 찾아보니까 겨우 찾았다 근데 별문제 아니었음 dbeaver를 실행시키면 이런 경고창이 뜨고 꺼진다 See the log file C:/Users/user/AppData/Roaming/DBeaverData/workspace6/.metadata/.log" 해당 경로에 가서 log 파일을 확인해 보면 Caused by: java.lang.Exception: 호환되지 않는 파일 형식입니다. 작업공간이 호환되지 않는 0 버전으로 저장되었습니다. at org...
2021.07.28

보통 특정 테이블의 row count 수를 알고 싶을 때 

SELECT count(*) FROM {schema}.{tableName};

의 쿼리를 사용했을 것이다. 

 

본론만 말하자면 

SELECT schemaname, relname, n_live_tup
FROM pg_stat_user_tables
-- where schemaname = '{schemaname}'
ORDER BY n_live_tup DESC;

이 쿼리를 사용하면 거의 1~2초만에 결과를 얻을 수 있다. 

where문은 해당하는 스키마의 테이블들만 볼 수 있는 쿼리고 없애면 전체 데이터베이스의 테이블들을 볼 수 있다. 

 

postgresql count 속도는 왜 느린가?

postgresql의 어떤 속성인지는 모르겠으나 count(*) 속도가 정말 정말 정말 상상도 할 수 없을 만큼 느리다.

왜 느린 거지? vacuum도 돌리고 dead tuple도 지우면서 관리한다고 생각했는데도 count(*) 쿼리 속도는 항상 느리다 

 

나는 보통 ETL 작업을 하기 때문에 DQ(데이터 품질) 검사를 할 때 우선적으로 하는 일은 ETL 적재한 테이블의 컬럼수를 확인하는 것이다. 

 

ETL 할 테이블이 수십 개가 되는데 이걸 하나하나 count Rows를 할 수는 없다. 시간 낭비에 심지어 쿼리 돌아가는 속도도 느리고 기분 탓인지는 모르겠지만 서버에 안 좋을 것 같은 기분이 든다...... 

 

https://postgresql.kr/docs/9.3/monitoring-stats.html

 

통계 수집기

PostgreSQL 통계 수집기 statistics collector는 서버 운영 상태에 대한 정보를 수집하거나 보고하기 위한 작업을 하는 백그라운드 시스템이다. 현재, 이 수집기는 테이블이나 인덱스의 디스크 블록 단위

postgresql.kr

postgresql 한글 문서다 

다른 DB는 잘 모르겠지만 postgresql은 통계 수집기라는 백그라운드 시스템이 있다. pg_ 어쩌고 라는 곳에서 view들을 만들어 사용자들이 쉽게 모니터링을 할 수 있게 만든 것임. 

 

이런 통계 수집에 대한 커스텀은 postgresql.conf 파일에서 할 수 있다고 한다. 자세한 것은 문서 참고! 

나는 vacuum에 대한 작업들을 커스텀 했던 기억이 있다. 

 

pg_stat_user_tables을 이용한 Explain.
count(*)로 진행한 쿼리 Explain.

실제로 약 2억 건의 count(*) 쿼리는 8분 정도가 걸렸다 

애초에 접근하는 테이블 자체가 다르기 때문에 속도가 현저하게 다른 것 같다. 

실제 현업 서비스에서는 count(*)를 사용하는 경우는 별로 없을 것이다 내가 배우고 경험하기로는 사용자 서비스 서버에 count(*)를 때려 박으면 과부화가...... 메모리가....... 어마무시하게 터진다고 알고 있음 

 

하지만 나같이 전체 테이블의 row 수를 알고 싶은 경우도 있으니 괜히 count(*) 써서 서버 비용 높이지 말고 pg에서 제공하는 view를 애용하자! 

 

 

 

 

 

utf-8인 csv를 dbeaver로 적재했을 때 한글이 깨지게 되는 현상이 나타난다 (pgadmin도 마찬가지) 

 

구글에 찾아보면 csv를 메모장으로 열어서 인코딩을 ANSI -> UTF8로 고친 후에 적재하라고 하는데 나는 레코드가 삼천만 개 정도 되어서 메모장에서 열리지 않는다...... 

 

csv 분할도 해 보고 다른 인코딩 방법을 찾았는데 원본 파일 바로 한글 깨지지 않게 적재하는 방법 알아냄 

인코딩을 EUC_KR로 바꿔서 하면 된다 ㅎ 

또 말썽이다....... 

ETL을 배치 프로그램 이용해서 만들고 있었는데 C#에서 쿼리가 dataset으로 안 받아와지고 해당 오류가 뜨길래  

Npgsql.NpgsqlException: 'Exception while reading from stream'

TimeoutException: Timeout during reading attempt

npgsql timeout during reading attempt

 

무엇인가 하니 forums.servicestack.net/t/postgresql-timeout/6289 해당 주소를 참고하여 서버 문제인 것을 알았다 

같이 일하시는 분이 공유기 아이피를 바꿔버림 아 ㅋㅋ 

 

 

1. 윈도우 + R services.msc

처음에는 postgresql-x64 눌렀을 때 서비스 시작밖에 안 떠 있었다

서비스 시작을 계속 눌러줘도 다음과 같은 에러창이 뜨는데 이 단계로 오지 않았다면 서비스 중지 후 다시 시작을 눌러주면 해결이 될 것 같다

첫 번째 방법 해결 X 

 

2. 작업관리자 - 서비스 탭 - postgresql 찾기 

 시작 눌러 주면 상태가 시작 중으로 바뀌면서 정상 작동이 된다....... 

 

3. 그래도 안 될 때 

~PATH\PostgreSQL\12\data  data 폴더에 postmaster.pid 를 삭제하고 1, 2 번 진행 

dbeaver로 postgresql 작업을 하다가 갑자기 에러창이 뜨면서 log 파일을 확인하라는 메세지가 떴다. 

ide 켜지지도 않고 이유 찾아보다가 포기하고 이틀 정도 그냥 pgadmin으로 작업한 듯......

 

이대로는 안 되겠다 싶어서 구글링으로 다시 찾아보니까 겨우 찾았다 근데 별문제 아니었음 

 

dbeaver를 실행시키면 이런 경고창이 뜨고 꺼진다 

See the log file C:/Users/user/AppData/Roaming/DBeaverData/workspace6/.metadata/.log"

 

해당 경로에 가서 log 파일을 확인해 보면 

Caused by: java.lang.Exception: 호환되지 않는 파일 형식입니다.  작업공간이 호환되지 않는 0 버전으로 저장되었습니다.
at org.eclipse.core.internal.resources.ResourceException.provideStackTrace(ResourceException.java:42)
at org.eclipse.core.internal.resources.ResourceException.<init>(ResourceException.java:38)
... 50 more

등이 나오는데 해결 방법은 간단하다

 

1. 

%HOMEPATH%/.dbeaver/.metadata/.plugins/org.eclipse.core.resources /.snap 

를 찾아서 .snap 삭제 

 

2. .snap이 없는 경우 

 - org.eclipse.core.resources  폴더 삭제 

 

3. 1, 2 번을 해도 안 될 때 

 - .metadata 삭제 

3번은 삭제 시 dbeaver 데이터 소스 연결 스크립트나 일부 구성이 삭제될 수 있음을 유의 

 

보통 2번까지 하면 정상적으로 dbeaver가 뜬다