Тюнинг производительности запросов

Оригинал тут

Список таблиц, в которых было больше случаев последовательного сканирования, чем индексированного.

SELECT relname, seq_scan - idx_scan AS too_much_seq, 
    CASE WHEN seq_scan - COALESCE(idx_scan, 0) > 0 THEN 'Missing Index?' ELSE 'OK' END,
    pg_relation_size(relname::regclass) AS rel_size, seq_scan, idx_scan 
FROM pg_stat_all_tables
WHERE schemaname = 'public' AND pg_relation_size(relname::regclass) > 80000
ORDER BY too_much_seq DESC
 

Поиск неиспользуемых индексов

SELECT indexrelid::regclass AS idx, relid::regclass AS tbl, 
    'DROP INDEX ' || indexrelid::regclass || ';' AS drop_statement
FROM pg_stat_user_indexes 
JOIN pg_index USING (indexrelid)
WHERE idx_scan = 0 AND indisunique IS FALSE
 

Возврат вставленных insert данных

Бывают случаи, когда надо вернуть какие-то данные записей, вставленных командой insert.

Вот пример функции, которая сначала добавляет данные пользователя, а потом использует полученнй id для добавления в группы:

CREATE OR REPLACE FUNCTION add_user(CHARACTER VARYING, CHARACTER VARYING, CHARACTER VARYING, CHARACTER VARYING, 
                                CHARACTER VARYING, TIMESTAMP WITH TIME zone, BOOLEAN, INTEGER[])
  RETURNS void AS
$BODY$
DECLARE _uid INTEGER;
  gid INTEGER;
BEGIN
  WITH uid(id) AS (INSERT INTO auth_user 
                                (username,last_name,first_name,email,"password",last_login,is_active)
      VALUES ($1,$2,$3,$4,$5,$6,$7) returning id )
      SELECT id INTO _uid FROM uid;
  foreach gid IN array $8
  loop
    INSERT INTO auth_user_groups (user_id,group_id) VALUES (_uid,gid);
  END loop;
END;
$BODY$
  LANGUAGE plpgsql VOLATILE
  COST 100;
ALTER FUNCTION add_user(CHARACTER VARYING, CHARACTER VARYING, CHARACTER VARYING, CHARACTER VARYING, 
                                CHARACTER VARYING, TIMESTAMP WITH TIME zone, BOOLEAN, INTEGER[])
  OWNER TO postgres;
 

Администрирование

Сегодня
Вчера
Эта неделя
Прошлая неделя
Этот месяц
Прошлый месяц
Вся статистика
82
3
82
26686
137
219
26798

IP: 3.138.68.71
Время: 2024-09-16 18:51:51
Счетчик joomla