db.getCollection('collection').find({"reg_dt": "20191016", "ranks" :{"$elemMatch" : {"keyword": {"$regex": "멀티태블릿거치대"}}}} )

 

'Routine > Database' 카테고리의 다른 글

MySQL 정렬 처리 방식  (0) 2020.02.02
MySQL 5.7.5 Handling of GROUP BY Issue  (0) 2020.02.02
Useful PostgreSQL Query  (0) 2020.02.02
Mysql 사용자 추가  (0) 2020.02.02
정렬 처리 방법 실행 계획의 Extra 코멘트
인덱스 사용한 정렬 별도의 내용 표기 없음
드라이빙 테이블만 정렬 (조인이 없는 경우 포함) "Using filesort"가 표시됨
조인 결과를 임시 테이블로 저장한 후, 임시 테이블에서 정렬 "Using temporary; Using filesort"가 같이 표시됨

https://12bme.tistory.com/161

 

[MySQL] MySQL의 주요 처리 방식

MySQL 정렬의 처리 방식 쿼리에 ORDER BY가 사용되면 반드시 다음 3가지 처리 방식 중 하나로 정렬이 처리됩니다. 일반적으로 밑쪽에 있는 정렬 방법으로 갈수록 처리가 느려집니다. 정렬 처리 방법 실행 계획의 E..

12bme.tistory.com

 

'Routine > Database' 카테고리의 다른 글

[mongodb]리스트내 특정 텍스트 검색  (0) 2020.02.02
MySQL 5.7.5 Handling of GROUP BY Issue  (0) 2020.02.02
Useful PostgreSQL Query  (0) 2020.02.02
Mysql 사용자 추가  (0) 2020.02.02

MySQL 5.7.5 이하 버전에 Group by 절 이 외 컬럼 조회 가능.

 

https://dev.mysql.com/doc/refman/5.7/en/group-by-handling.html

 

MySQL :: MySQL 5.7 Reference Manual :: 12.20.3 MySQL Handling of GROUP BY

12.20.3 MySQL Handling of GROUP BY SQL-92 and earlier does not permit queries for which the select list, HAVING condition, or ORDER BY list refer to nonaggregated columns that are not named in the GROUP BY clause. For example, this query is illegal in stan

dev.mysql.com

 

'Routine > Database' 카테고리의 다른 글

[mongodb]리스트내 특정 텍스트 검색  (0) 2020.02.02
MySQL 정렬 처리 방식  (0) 2020.02.02
Useful PostgreSQL Query  (0) 2020.02.02
Mysql 사용자 추가  (0) 2020.02.02
  • 테이블 용량 확인
--테이블 용량 확인
-- INDEX 미포함
select pg_relation_size('테이블명')
;

-- INDEX 포함
select pg_total_relation_size('테이블명')
;

-- all tables and their size, with/without indexes
select datname, pg_size_pretty(pg_database_size(datname))
from   pg_database
order by pg_database_size(datname) desc
;

-- table index usage rates (should not be less than 0.99)
SELECT relname, 100 * idx_scan / (seq_scan + idx_scan) percent_of_times_index_used, n_live_tup rows_in_table
FROM   pg_stat_user_tables
ORDER BY n_live_tup DESC
;

-- how many indexes are in cache
SELECT sum(idx_blks_read) as idx_read, sum(idx_blks_hit) as idx_hit, (sum(idx_blks_hit) - sum(idx_blks_read)) / sum(idx_blks_hit) as ratio
FROM   pg_statio_user_indexes;

 

  • Connection 확인
-- connection 확인
select max_conn,used,res_for_super,max_conn-used-res_for_super res_for_normal
from
(select count(*) used from pg_stat_activity) t1,
(select setting::int res_for_super from pg_settings where name=$$superuser_reserved_connections$$) t2,
(select setting::int max_conn from pg_settings where name=$$max_connections$$) t3
;

 

  • 실행중인 쿼리 확인
-- 실행중인 쿼리 확인
select *
from   pg_stat_activity
where  1=1
--and query like '%update%'
--and client_addr = 'IP주소'
order by client_addr
;

-- active 확인
-- show running queries (pre 9.2)
SELECT procpid, age(clock_timestamp(), query_start), usename, current_query
FROM pg_stat_activity
WHERE current_query != '<IDLE>' AND current_query NOT ILIKE '%pg_stat_activity%'
ORDER BY query_start desc
;

 

  • Query kill
-- query kill
SELECT pg_cancel_backend('PID')
;

--If the process cannot be killed, try:
SELECT pg_terminate_backend('PID')
;

 

  • Lock 확인
-- lock 확인
SELECT relation::regclass, * FROM pg_locks WHERE NOT granted
;

-- lock 확인
SELECT blocked_locks.pid AS blocked_pid,
       blocked_activity.usename AS blocked_user,
       blocking_locks.pid AS blocking_pid,
       blocking_activity.usename AS blocking_user,
       blocked_activity.query AS blocked_statement,
       blocking_activity.query AS current_statement_in_blocking_process
FROM   pg_catalog.pg_locks blocked_locks
JOIN   pg_catalog.pg_stat_activity blocked_activity ON blocked_activity.pid = blocked_locks.pid
JOIN   pg_catalog.pg_locks blocking_locks
ON     blocking_locks.locktype = blocked_locks.locktype
AND blocking_locks.DATABASE IS NOT DISTINCT FROM blocked_locks.DATABASE
AND blocking_locks.relation IS NOT DISTINCT FROM blocked_locks.relation
AND blocking_locks.page IS NOT DISTINCT FROM blocked_locks.page
AND blocking_locks.tuple IS NOT DISTINCT FROM blocked_locks.tuple
AND blocking_locks.virtualxid IS NOT DISTINCT FROM blocked_locks.virtualxid
AND blocking_locks.transactionid IS NOT DISTINCT FROM blocked_locks.transactionid
AND blocking_locks.classid IS NOT DISTINCT FROM blocked_locks.classid
AND blocking_locks.objid IS NOT DISTINCT FROM blocked_locks.objid
AND blocking_locks.objsubid IS NOT DISTINCT FROM blocked_locks.objsubid
AND blocking_locks.pid != blocked_locks.pid
JOIN pg_catalog.pg_stat_activity blocking_activity ON blocking_activity.pid = blocking_locks.pid
WHERE NOT blocked_locks.granted
;

-- 락 쿼리 확인
WITH RECURSIVE req AS (
SELECT psa.datname
, psa.usename
, psa.pid
, pg_blocking_pids(psa.pid) AS blocking_by
, psa.application_name
, psa.wait_event_type
, psa.state
, psa.query_start
, psa.query
, ( SELECT array_agg(( SELECT relname
FROM pg_class pc
WHERE pc.oid = pl.relation ))
FROM pg_locks pl
WHERE pl.pid = psa.pid
AND locktype = 'relation'
) AS relation
, 0 AS level
, row_number() over() AS rn
FROM pg_stat_activity psa
WHERE cardinality(pg_blocking_pids(psa.pid))= 0
UNION
SELECT psa.datname
, psa.usename
, psa.pid
, pg_blocking_pids(psa.pid) AS blocking_by
, psa.application_name
, psa.wait_event_type
, psa.state
, psa.query_start
, psa.query
, ( SELECT array_agg(( SELECT relname FROM pg_class pc WHERE pc.oid = pl.relation ))
FROM pg_locks pl
WHERE pl.pid = psa.pid
AND locktype = 'relation'
) AS relation
, level + 1 as level
, req.rn
FROM pg_stat_activity psa
INNER JOIN req ON req.pid = any(pg_blocking_pids(psa.pid))
)
SELECT psa.datname
, psa.usename
, psa.pid
, psa.blocking_by
, psa.application_name
, psa.wait_event_type
, psa.state
, psa.relation
, now() - psa.query_start AS elapsed_time
, psa.query
FROM ( SELECT req.rn
, req.level
, req.datname
, req.usename
, req.pid
, req.blocking_by
, req.application_name
, req.wait_event_type
, req.state
, req.relation
, req.query_start
, req.query
, count( rn ) over( PARTITION BY rn ) AS blocked_cnt
FROM req
) AS psa
WHERE psa.blocked_cnt > 1
ORDER by psa.rn, psa.level, psa.blocking_by
;

 

  • VACUUM
-- vacuum command
VACUUM (VERBOSE, ANALYZE);

 

  • All databased and their sizes
-- all databases and their sizes
select * from pg_user;

 

  • cache hit rates
-- cache hit rates (should not be less than 0.99)
SELECT sum(heap_blks_read) as heap_read, sum(heap_blks_hit) as heap_hit, (sum(heap_blks_hit) - sum(heap_blks_read)) / sum(heap_blks_hit) as ratio
FROM pg_statio_user_tables;

 

  • Dump database
-- Dump database on remote host to file
$ pg_dump -U username -h hostname databasename > dump.sql

 

 

  • Import Dump
-- Import dump into existing database
$ psql -d newdb -f dump.sql

 

'Routine > Database' 카테고리의 다른 글

[mongodb]리스트내 특정 텍스트 검색  (0) 2020.02.02
MySQL 정렬 처리 방식  (0) 2020.02.02
MySQL 5.7.5 Handling of GROUP BY Issue  (0) 2020.02.02
Mysql 사용자 추가  (0) 2020.02.02
CREATE DATABASE new_db;

CREATE USER 'new_user'@'%' IDENTIFIED BY 'new_user_password!';

ALTER  USER 'new_user'@'%' IDENTIFIED BY 'new_user_password!';

GRANT ALL PRIVILEGES ON new_db. * TO 'new_user'@'%';

FLUSH PRIVILEGES;

USE new_db;

SHOW GRANTS FOR 'new_user'@'%';

 

'Routine > Database' 카테고리의 다른 글

[mongodb]리스트내 특정 텍스트 검색  (0) 2020.02.02
MySQL 정렬 처리 방식  (0) 2020.02.02
MySQL 5.7.5 Handling of GROUP BY Issue  (0) 2020.02.02
Useful PostgreSQL Query  (0) 2020.02.02