Все технические форумы на одном сайте Удобный поиск информации с популярных форумов в одном месте
Вопрос: Низкая производительность при insert

Здравствуйте.
Очень нужна помощь, что-то я в тупик зашёл.

Перенёс приложение с рабочей, виртуальной машины на подготовленный сервер. На котором наблюдается крайне низкая производительность при выполнении Insert.

При выполнении обработчика, в базу должно поступить порядка 150 000 строк. На рабочей машине эта процедура занимала около 15 минут. На сервере – 2 часа и 60% только записано. При этом Select отрабатывает на ура.
Если смотреть top то под mysql выделено 2-5% mem (до 500Mb) и около 6 Gb памяти не используется (inactive в /proc/meminfo)
Что-то я крутил в настройках /etc/mysql/my.cnf, но на данный момент всё по умолчанию.
Проверен жесткий диск в софт-рейде (hdparm), показатели в норме.

Помогите найти проблему.
Ответ:
timark
Сомневаюсь, что LOAD DATA INFILE тут поможет, поскольку данные следует распределить по таблицам. Или я ошибаюсь? Может как-то можно по определённым алгоритмам на триггерах это реализовать?
Я бы рассмотрел вариант загрузки в промежуточную таблицу, а потом разноса по другим таблицам с помощью INSERT ... SELECT ... .
Вопрос: Ошибка после восстановления из nbk

После восстановления из бэкапа при попытке подключится к базе получаю ошибку:

Use CONNECT or CREATE DATABASE to specify a database
SQL> connect d:\Base\SUPERMAGDK_050815.fdb;
Statement failed, SQLSTATE = 08001
I/O error during "CreateFile (open)" operation for file "D:\BASE\SUPERMAGDK_050815.FDB.delta"
-Error while trying to open file
-Не удается найти указанный файл.

Базу восстанавливал из двух файлов (0+1 уровень)
При использовании nbackup -F - ошибка ушла,но база в состоянии восстановления из одного файла (nbackup 0 уровня).
Кто виноват и что делать Это можно исправить? И в дальнейшем как то этого избежать можно?
Ответ: Gallemar,

пиши в личку, попробуем
Вопрос: Ошибка при выполнении grant, select и тд после восстановления из бэкапа.

Проблема такая: после восстановления из бэкапа БД не могу просмотреть некоторые таблицы и добавить своего пользователя в dbadm и sec adm.
Версия db2 - 9.7. Архив делался на такой же версии.
При установке db2 был выбран усиленный режим защиты. Администратора windows добавил в группу db2admns. Запускаю центр управления от имени Администратора. С БД соединяюсь, но оне могу выполнить select к таблицам - ошибка:
com.ibm.db.DataException: Ошибка менеджера баз данных. : [IBM][CLI Driver][DB2/NT] SQL0551N  "ADMIN" не обладает правами или привилегией для выполнения операции "SELECT" над объектом "ALEX.DEPARTS".  SQLSTATE=42501

Когда пытаюсь создать пользователя в этой БД получаю ошибку:

[IBM][CLI Driver][DB2/NT] SQL0552N "ADMIN"не обладает
привилегией для выполнения операции "GRANT". SQLSTATE=42502
Объяснение:
Пользователь с ID авторизации "<ID-авторизации>" попытался выполнить
операцию "<операция>", не имея надлежащих полномочий.
Пользователи системы объединения: Некоторые источники данных не передают
правильные значения параметров"<ID-авторизации>" и <операция>. В таких
случаях параметры сообщения будет иметь следующий формат:
"<источник-данных> AUTHID:UNKNOWN" и "UNKNOWN", указывая тем самым, что
для заданного источника данных неизвестны действительные значения ID
авторизации и операции.
Оператор невозможно обработать.
Действия пользователя:
Убедитесь, что у "<ID-авторизации>" есть полномочия на выполнение этой
операции.
Пользователи системы объединения: полномочия можно задать на сервере
объединения, на источнике данных, или и там, и там.
sqlcode: -552
sqlstate: 42502

C db2 только начинал знакомиться.
Подскажите, как исправить?
Ответ:
asmnkt

Подскажите, как исправить?

Authorization errors after restoring a database to V9.7 instance
Вопрос: Триггер срабатывающий после восстановления БД

Доброе время суток.
Есть ли какой нибудь вариант организации выполнения запроса сразу же после восстановления БД?

Пытался организовать триггер над системной таблицей msdb..restorehistory . Знаю что пользовательские триггеры не работают в системных бд , поэтому поменял свойство триггера (Is_ms_shipped) с помощью процедуры sp_MS_marksystemobject. К сожалению триггер так и не стал обрабатываться.
Ответ: gang,komrad, спасибо за ответы, способ подходящий. Единственно интересно почему триггер не работает и как это все таки исправить.
Вопрос: После восстановления базы запрос стал исполнятся 500 раз медленее, помогите разобраться

Всем привет.

После восстановления базы, пользователи стали жаловаться что все тормозит. Виновником оказался такой запрос:
SELECT 
	t1.*,
	COALESCE(av.purchase_price_average, CAST(10000 - ecd1_extra_discount AS BIGINT) * b_base_price / 10000) AS purchase_price_average 
FROM (
	SELECT 
	   ab.application_id, 
	   ab.book_id, 
	   ab.sale_price, 
	   ab.sale_price_wd, 
	   ab.purchase_price AS purchase_cost_app, 
	   CAST(10000 - ecd.extra_discount AS BIGINT) * b.base_price / 10000 AS purchase_cost_now, 
	   CAST(10000 - ecd1.extra_discount AS BIGINT) * b.base_price / 10000 AS purchase_cost_org, 
	   ecd1.extra_discount AS ecd1_extra_discount,
	   b.base_price AS b_base_price
	FROM application_books ab 
	JOIN applications a ON (a.application_id = ab.application_id) 
	JOIN books b ON (b.book_id = ab.book_id) 
	JOIN publishers p ON (p.publisher_id = b.publisher_id) 
	JOIN mv_extra_charge_for_all_departments ecd ON (ecd.target_department_id = a.homedep_id and ecd.publisher_id = p.publisher_id) 
	JOIN mv_extra_charge_for_all_departments ecd1 ON (ecd1.target_department_id = 1 and ecd1.publisher_id = p.publisher_id) 
	WHERE ab.application_id IN (46071)	
) t1
LEFT JOIN ( 
   SELECT book_id, SUM(purchase_price) / COUNT(*) AS purchase_price_average FROM book_instances 
   WHERE book_status = 100 
       AND book_id IN (SELECT book_id FROM application_books WHERE application_id IN (46071) GROUP BY book_id)
   GROUP BY book_id 
) av ON (av.book_id = t1.book_id) 

Время его выполнения 29531 мс, причем если запустить то же запрос на старой базы, то время выполнения 70мс. Старая база поднята на том же PostgreSQL сервере, но под другим именем.
Новый план выгядит вот так:
+

"Nested Loop (cost=826.53..938.52 rows=1 width=40) (actual time=4716.526..29507.218 rows=13 loops=1)"
" Output: ab.application_id, ab.book_id, ab.sale_price, ab.sale_price_wd, ab.purchase_price, ((((10000 - ecd.extra_discount))::bigint * b.base_price) / 10000), ((((10000 - ecd1.extra_discount))::bigint * b.base_price) / 10000), ecd1.extra_discount, b.base_ (...)"
" Join Filter: ((ab.book_id = b.book_id) AND (p.publisher_id = b.publisher_id))"
" Rows Removed by Join Filter: 328328"
" Buffers: shared hit=1813618"
" -> Nested Loop Left Join (cost=826.24..930.58 rows=1 width=48) (actual time=39.111..29415.222 rows=754 loops=1)"
" Output: ab.application_id, ab.book_id, ab.sale_price, ab.sale_price_wd, ab.purchase_price, ecd.extra_discount, ecd.publisher_id, p.publisher_id, ecd1.extra_discount, ecd1.publisher_id, ((sum(book_instances.purchase_price) / count(*)))"
" Join Filter: (book_instances.book_id = ab.book_id)"
" Rows Removed by Join Filter: 5568"
" Buffers: shared hit=1740090"
" -> Nested Loop (cost=0.85..61.51 rows=1 width=40) (actual time=0.251..3.092 rows=754 loops=1)"
" Output: ab.application_id, ab.book_id, ab.sale_price, ab.sale_price_wd, ab.purchase_price, ecd.extra_discount, ecd.publisher_id, p.publisher_id, ecd1.extra_discount, ecd1.publisher_id"
" Buffers: shared hit=1645"
" -> Nested Loop (cost=0.43..49.51 rows=1 width=24) (actual time=0.237..1.180 rows=58 loops=1)"
" Output: a.application_id, ecd.extra_discount, ecd.publisher_id, p.publisher_id, ecd1.extra_discount, ecd1.publisher_id"
" Buffers: shared hit=145"
" -> Nested Loop (cost=0.29..49.36 rows=1 width=20) (actual time=0.231..0.899 rows=58 loops=1)"
" Output: a.application_id, ecd.extra_discount, ecd.publisher_id, ecd1.extra_discount, ecd1.publisher_id"
" Join Filter: (ecd.publisher_id = ecd1.publisher_id)"
" Rows Removed by Join Filter: 3306"
" Buffers: shared hit=29"
" -> Nested Loop (cost=0.29..29.48 rows=9 width=12) (actual time=0.169..0.309 rows=58 loops=1)"
" Output: a.application_id, ecd.extra_discount, ecd.publisher_id"
" Join Filter: (a.homedep_id = ecd.target_department_id)"
" Rows Removed by Join Filter: 1682"
" Buffers: shared hit=16"
" -> Index Scan using applications_idx_application_id on public.applications a (cost=0.29..8.29 rows=1 width=8) (actual time=0.007..0.007 rows=1 loops=1)"
" Output: a.application_id, a.application_status, a.homedep_id, a.customer_id, a.manager_id, a.creation_date, a.delivery_date, a.discount_percent, a.absolute_cost, a.comments, a.application_priority, a.activation_date, a (...)"
" Index Cond: (a.application_id = 46071)"
" Buffers: shared hit=3"
" -> Seq Scan on public.mv_extra_charge_for_all_departments ecd (cost=0.00..14.82 rows=1820 width=12) (actual time=0.004..0.142 rows=1740 loops=1)"
" Output: ecd.target_department_id, ecd.publisher_id, ecd.discount, ecd.extra_charge, ecd.ecdep_id, ecd.extra_discount, ecd.disdep_id"
" Buffers: shared hit=13"
" -> Materialize (cost=0.00..19.42 rows=9 width=8) (actual time=0.001..0.005 rows=58 loops=58)"
" Output: ecd1.extra_discount, ecd1.publisher_id"
" Buffers: shared hit=13"
" -> Seq Scan on public.mv_extra_charge_for_all_departments ecd1 (cost=0.00..19.37 rows=9 width=8) (actual time=0.057..0.122 rows=58 loops=1)"
" Output: ecd1.extra_discount, ecd1.publisher_id"
" Filter: (ecd1.target_department_id = 1)"
" Rows Removed by Filter: 1682"
" Buffers: shared hit=13"
" -> Index Only Scan using publishers_idx_publisher_id on public.publishers p (cost=0.14..0.15 rows=1 width=4) (actual time=0.003..0.004 rows=1 loops=58)"
" Output: p.publisher_id"
" Index Cond: (p.publisher_id = ecd.publisher_id)"
" Heap Fetches: 58"
" Buffers: shared hit=116"
" -> Index Scan using application_books_idx_application_id on public.application_books ab (cost=0.42..11.99 rows=7 width=20) (actual time=0.010..0.026 rows=13 loops=58)"
" Output: ab.application_id, ab.book_id, ab.base_price, ab.sale_price, ab.paid_count, ab.free_count, ab.purchase_price, ab.purchase_price_date, ab.sale_price_wd, ab.log_create_date, ab.log_create_manager, ab.log_update_date, ab.log_update (...)"
" Index Cond: (ab.application_id = 46071)"
" Buffers: shared hit=1500"
" -> GroupAggregate (cost=825.40..869.03 rows=9 width=8) (actual time=5.779..39.004 rows=8 loops=754)"
" Output: book_instances.book_id, (sum(book_instances.purchase_price) / count(*))"
" Buffers: shared hit=1738445"
" -> Nested Loop (cost=825.40..868.93 rows=9 width=8) (actual time=2.890..38.981 rows=99 loops=754)"
" Output: book_instances.book_id, book_instances.purchase_price"
" Buffers: shared hit=1738445"
" -> Group (cost=0.42..8.47 rows=1 width=4) (actual time=0.004..0.031 rows=13 loops=754)"
" Output: application_books.book_id"
" Buffers: shared hit=16309"
" -> Index Only Scan using application_books_idx_application_id_book_id on public.application_books (cost=0.42..8.45 rows=7 width=4) (actual time=0.004..0.024 rows=13 loops=754)"
" Output: application_books.application_id, application_books.book_id"
" Index Cond: (application_books.application_id = 46071)"
" Heap Fetches: 14800"
" Buffers: shared hit=16309"
" -> Bitmap Heap Scan on public.book_instances (cost=824.98..860.46 rows=9 width=8) (actual time=2.989..2.991 rows=8 loops=9802)"
" Output: book_instances.book_instance_id, book_instances.book_id, book_instances.invoice_id, book_instances.storage_id, book_instances.book_status, book_instances.application_id, book_instances.purchase_price, book_instances.sale_p (...)"
" Recheck Cond: ((book_instances.book_id = application_books.book_id) AND (book_instances.book_status = 100))"
" Buffers: shared hit=1722136"
" -> BitmapAnd (cost=824.98..824.98 rows=9 width=0) (actual time=2.987..2.987 rows=0 loops=9802)"
" Buffers: shared hit=1704794"
" -> Bitmap Index Scan on book_instances_idx_book_id (cost=0.00..5.30 rows=292 width=0) (actual time=0.133..0.133 rows=2547 loops=9802)"
" Index Cond: (book_instances.book_id = application_books.book_id)"
" Buffers: shared hit=97266"
" -> Bitmap Index Scan on book_instances_idx_book_status (cost=0.00..805.04 rows=57536 width=0) (actual time=2.825..2.825 rows=58858 loops=9802)"
" Index Cond: (book_instances.book_status = 100)"
" Buffers: shared hit=1607528"
" -> Index Scan using books_idx_publisher_id on public.books b (cost=0.29..5.25 rows=443 width=12) (actual time=0.006..0.094 rows=435 loops=754)"
" Output: b.book_id, b.publisher_id, b.article, b.book_name, b.book_name_original, b.edition, b.edition_year, b.base_price, b.not_published, b.is_manual, b.manual_id, b.weight, b.units_in_box, b.create_date, b.bit_flags, b.rating, b.book_name_short, (...)"
" Index Cond: (b.publisher_id = ecd.publisher_id)"
" Buffers: shared hit=73528"
"Total runtime: 29507.333 ms"

Старый план такой:
+

"Nested Loop (cost=1074.01..1151.83 rows=1 width=40) (actual time=15.955..52.837 rows=13 loops=1)"
" Output: ab.application_id, ab.book_id, ab.sale_price, ab.sale_price_wd, ab.purchase_price, ((((10000 - ecd.extra_discount))::bigint * b.base_price) / 10000), ((((10000 - ecd1.extra_discount))::bigint * b.base_price) / 10000), COALESCE(av.purchase_price_a (...)"
" Buffers: shared hit=10718"
" -> Nested Loop (cost=1073.87..1151.65 rows=1 width=52) (actual time=15.939..52.771 rows=13 loops=1)"
" Output: ab.application_id, ab.book_id, ab.sale_price, ab.sale_price_wd, ab.purchase_price, b.base_price, b.publisher_id, ecd.extra_discount, ecd.publisher_id, ecd1.extra_discount, ecd1.publisher_id, av.purchase_price_average"
" Join Filter: (ab.book_id = b.book_id)"
" Rows Removed by Join Filter: 327600"
" Buffers: shared hit=10692"
" -> Nested Loop (cost=0.57..55.37 rows=52 width=32) (actual time=0.262..10.927 rows=25201 loops=1)"
" Output: a.application_id, ecd.extra_discount, ecd.publisher_id, b.base_price, b.book_id, b.publisher_id, ecd1.extra_discount, ecd1.publisher_id"
" Buffers: shared hit=6140"
" -> Nested Loop (cost=0.29..49.36 rows=1 width=20) (actual time=0.253..0.665 rows=58 loops=1)"
" Output: a.application_id, ecd.extra_discount, ecd.publisher_id, ecd1.extra_discount, ecd1.publisher_id"
" Join Filter: (ecd.publisher_id = ecd1.publisher_id)"
" Rows Removed by Join Filter: 3306"
" Buffers: shared hit=29"
" -> Nested Loop (cost=0.29..29.48 rows=9 width=12) (actual time=0.191..0.220 rows=58 loops=1)"
" Output: a.application_id, ecd.extra_discount, ecd.publisher_id"
" Join Filter: (a.homedep_id = ecd.target_department_id)"
" Rows Removed by Join Filter: 1682"
" Buffers: shared hit=16"
" -> Index Scan using applications_idx_application_id on public.applications a (cost=0.29..8.29 rows=1 width=8) (actual time=0.009..0.010 rows=1 loops=1)"
" Output: a.application_id, a.application_status, a.homedep_id, a.customer_id, a.manager_id, a.creation_date, a.delivery_date, a.discount_percent, a.absolute_cost, a.comments, a.application_priority, a.activation_date, a.appli (...)"
" Index Cond: (a.application_id = 46071)"
" Buffers: shared hit=3"
" -> Seq Scan on public.mv_extra_charge_for_all_departments ecd (cost=0.00..14.82 rows=1820 width=12) (actual time=0.003..0.093 rows=1740 loops=1)"
" Output: ecd.target_department_id, ecd.publisher_id, ecd.discount, ecd.extra_charge, ecd.ecdep_id, ecd.extra_discount, ecd.disdep_id"
" Buffers: shared hit=13"
" -> Materialize (cost=0.00..19.42 rows=9 width=8) (actual time=0.001..0.004 rows=58 loops=58)"
" Output: ecd1.extra_discount, ecd1.publisher_id"
" Buffers: shared hit=13"
" -> Seq Scan on public.mv_extra_charge_for_all_departments ecd1 (cost=0.00..19.37 rows=9 width=8) (actual time=0.056..0.123 rows=58 loops=1)"
" Output: ecd1.extra_discount, ecd1.publisher_id"
" Filter: (ecd1.target_department_id = 1)"
" Rows Removed by Filter: 1682"
" Buffers: shared hit=13"
" -> Index Scan using books_idx_publisher_id on public.books b (cost=0.29..5.56 rows=451 width=12) (actual time=0.004..0.106 rows=435 loops=58)"
" Output: b.book_id, b.publisher_id, b.article, b.book_name, b.book_name_original, b.edition, b.edition_year, b.base_price, b.not_published, b.is_manual, b.manual_id, b.weight, b.units_in_box, b.create_date, b.bit_flags, b.rating, b.book_ (...)"
" Index Cond: (b.publisher_id = ecd.publisher_id)"
" Buffers: shared hit=6111"
" -> Materialize (cost=1073.30..1094.11 rows=7 width=28) (actual time=0.000..0.001 rows=13 loops=25201)"
" Output: ab.application_id, ab.book_id, ab.sale_price, ab.sale_price_wd, ab.purchase_price, av.purchase_price_average"
" Buffers: shared hit=4552"
" -> Merge Left Join (cost=1073.30..1094.08 rows=7 width=28) (actual time=7.850..7.862 rows=13 loops=1)"
" Output: ab.application_id, ab.book_id, ab.sale_price, ab.sale_price_wd, ab.purchase_price, av.purchase_price_average"
" Merge Cond: (ab.book_id = av.book_id)"
" Buffers: shared hit=4552"
" -> Index Scan using application_books_idx_application_id_book_id on public.application_books ab (cost=0.42..21.13 rows=7 width=20) (actual time=0.005..0.012 rows=13 loops=1)"
" Output: ab.application_id, ab.book_id, ab.base_price, ab.sale_price, ab.paid_count, ab.free_count, ab.purchase_price, ab.purchase_price_date, ab.sale_price_wd, ab.log_create_date, ab.log_create_manager, ab.log_update_date, ab.log_ (...)"
" Index Cond: (ab.application_id = 46071)"
" Buffers: shared hit=11"
" -> Sort (cost=1072.88..1072.90 rows=11 width=12) (actual time=7.841..7.842 rows=9 loops=1)"
" Output: av.purchase_price_average, av.book_id"
" Sort Key: av.book_id"
" Sort Method: quicksort Memory: 25kB"
" Buffers: shared hit=4541"
" -> Subquery Scan on av (cost=1072.64..1072.69 rows=11 width=12) (actual time=7.831..7.833 rows=9 loops=1)"
" Output: av.purchase_price_average, av.book_id"
" Buffers: shared hit=4541"
" -> HashAggregate (cost=1072.64..1072.67 rows=11 width=8) (actual time=7.830..7.831 rows=9 loops=1)"
" Output: book_instances.book_id, (sum(book_instances.purchase_price) / count(*))"
" Buffers: shared hit=4541"
" -> Nested Loop (cost=17.63..1072.55 rows=11 width=8) (actual time=0.677..7.791 rows=161 loops=1)"
" Output: book_instances.book_id, book_instances.purchase_price"
" Buffers: shared hit=4541"
" -> HashAggregate (cost=12.34..12.34 rows=1 width=4) (actual time=0.018..0.022 rows=13 loops=1)"
" Output: application_books.book_id"
" Buffers: shared hit=11"
" -> Index Scan using application_books_idx_application_id on public.application_books (cost=0.42..12.32 rows=7 width=4) (actual time=0.005..0.012 rows=13 loops=1)"
" Output: application_books.application_id, application_books.book_id, application_books.base_price, application_books.sale_price, application_books.paid_count, application_books.free_count, application (...)"
" Index Cond: (application_books.application_id = 46071)"
" Buffers: shared hit=11"
" -> Bitmap Heap Scan on public.book_instances (cost=5.29..1060.20 rows=11 width=8) (actual time=0.459..0.593 rows=12 loops=13)"
" Output: book_instances.book_instance_id, book_instances.book_id, book_instances.invoice_id, book_instances.storage_id, book_instances.book_status, book_instances.application_id, book_instances.purchase_pric (...)"
" Recheck Cond: (book_instances.book_id = application_books.book_id)"
" Filter: (book_instances.book_status = 100)"
" Rows Removed by Filter: 2481"
" Buffers: shared hit=4530"
" -> Bitmap Index Scan on book_instances_idx_book_id (cost=0.00..5.29 rows=288 width=0) (actual time=0.134..0.134 rows=2494 loops=13)"
" Index Cond: (book_instances.book_id = application_books.book_id)"
" Buffers: shared hit=129"
" -> Index Only Scan using publishers_idx_publisher_id on public.publishers p (cost=0.14..0.15 rows=1 width=4) (actual time=0.002..0.002 rows=1 loops=13)"
" Output: p.publisher_id"
" Index Cond: (p.publisher_id = b.publisher_id)"
" Heap Fetches: 13"
" Buffers: shared hit=26"
"Total runtime: 53.005 ms"


Запрос один и тот же, сервер тотже повторяемость 100%

Причем если в новой базе выполнить кажды подзапрос отдельно, то общее время будет такое же как и запроса на старой базе
План первого подзапроса "FROM"
+

"Nested Loop (cost=12.74..67.82 rows=1 width=32) (actual time=2.702..10.925 rows=13 loops=1)"
" Output: ab.application_id, ab.book_id, ab.sale_price, ab.sale_price_wd, ab.purchase_price, ((((10000 - ecd.extra_discount))::bigint * b.base_price) / 10000), ((((10000 - ecd1.extra_discount))::bigint * b.base_price) / 10000), ecd1.extra_discount, b.base_ (...)"
" Buffers: shared hit=5725"
" -> Hash Join (cost=12.60..67.65 rows=1 width=44) (actual time=2.691..10.888 rows=13 loops=1)"
" Output: ab.application_id, ab.book_id, ab.sale_price, ab.sale_price_wd, ab.purchase_price, b.base_price, b.publisher_id, ecd.extra_discount, ecd.publisher_id, ecd1.extra_discount, ecd1.publisher_id"
" Hash Cond: (b.book_id = ab.book_id)"
" Buffers: shared hit=5699"
" -> Nested Loop (cost=0.57..55.05 rows=51 width=32) (actual time=0.294..9.509 rows=25257 loops=1)"
" Output: a.application_id, ecd.extra_discount, ecd.publisher_id, b.base_price, b.book_id, b.publisher_id, ecd1.extra_discount, ecd1.publisher_id"
" Buffers: shared hit=5685"
" -> Nested Loop (cost=0.29..49.36 rows=1 width=20) (actual time=0.288..0.693 rows=58 loops=1)"
" Output: a.application_id, ecd.extra_discount, ecd.publisher_id, ecd1.extra_discount, ecd1.publisher_id"
" Join Filter: (ecd.publisher_id = ecd1.publisher_id)"
" Rows Removed by Join Filter: 3306"
" Buffers: shared hit=29"
" -> Nested Loop (cost=0.29..29.48 rows=9 width=12) (actual time=0.218..0.255 rows=58 loops=1)"
" Output: a.application_id, ecd.extra_discount, ecd.publisher_id"
" Join Filter: (a.homedep_id = ecd.target_department_id)"
" Rows Removed by Join Filter: 1682"
" Buffers: shared hit=16"
" -> Index Scan using applications_idx_application_id on public.applications a (cost=0.29..8.29 rows=1 width=8) (actual time=0.006..0.007 rows=1 loops=1)"
" Output: a.application_id, a.application_status, a.homedep_id, a.customer_id, a.manager_id, a.creation_date, a.delivery_date, a.discount_percent, a.absolute_cost, a.comments, a.application_priority, a.activation_date, a.appli (...)"
" Index Cond: (a.application_id = 46071)"
" Buffers: shared hit=3"
" -> Seq Scan on public.mv_extra_charge_for_all_departments ecd (cost=0.00..14.82 rows=1820 width=12) (actual time=0.004..0.142 rows=1740 loops=1)"
" Output: ecd.target_department_id, ecd.publisher_id, ecd.discount, ecd.extra_charge, ecd.ecdep_id, ecd.extra_discount, ecd.disdep_id"
" Buffers: shared hit=13"
" -> Materialize (cost=0.00..19.42 rows=9 width=8) (actual time=0.001..0.004 rows=58 loops=58)"
" Output: ecd1.extra_discount, ecd1.publisher_id"
" Buffers: shared hit=13"
" -> Seq Scan on public.mv_extra_charge_for_all_departments ecd1 (cost=0.00..19.37 rows=9 width=8) (actual time=0.066..0.125 rows=58 loops=1)"
" Output: ecd1.extra_discount, ecd1.publisher_id"
" Filter: (ecd1.target_department_id = 1)"
" Rows Removed by Filter: 1682"
" Buffers: shared hit=13"
" -> Index Scan using books_idx_publisher_id on public.books b (cost=0.29..5.25 rows=443 width=12) (actual time=0.003..0.085 rows=435 loops=58)"
" Output: b.book_id, b.publisher_id, b.article, b.book_name, b.book_name_original, b.edition, b.edition_year, b.base_price, b.not_published, b.is_manual, b.manual_id, b.weight, b.units_in_box, b.create_date, b.bit_flags, b.rating, b.book_ (...)"
" Index Cond: (b.publisher_id = ecd.publisher_id)"
" Buffers: shared hit=5656"
" -> Hash (cost=12.00..12.00 rows=7 width=20) (actual time=0.020..0.020 rows=13 loops=1)"
" Output: ab.application_id, ab.book_id, ab.sale_price, ab.sale_price_wd, ab.purchase_price"
" Buckets: 1024 Batches: 1 Memory Usage: 1kB"
" Buffers: shared hit=14"
" -> Index Scan using application_books_idx_application_id on public.application_books ab (cost=0.42..12.00 rows=7 width=20) (actual time=0.006..0.018 rows=13 loops=1)"
" Output: ab.application_id, ab.book_id, ab.sale_price, ab.sale_price_wd, ab.purchase_price"
" Index Cond: (ab.application_id = 46071)"
" Buffers: shared hit=14"
" -> Index Only Scan using publishers_idx_publisher_id on public.publishers p (cost=0.14..0.15 rows=1 width=4) (actual time=0.001..0.001 rows=1 loops=13)"
" Output: p.publisher_id"
" Index Cond: (p.publisher_id = b.publisher_id)"
" Heap Fetches: 13"
" Buffers: shared hit=26"
"Total runtime: 11.004 ms"

План вторго подзапроса "LEFT JOIN"
+

"GroupAggregate (cost=825.40..871.11 rows=9 width=8) (actual time=5.806..38.066 rows=8 loops=1)"
" Output: book_instances.book_id, (sum(book_instances.purchase_price) / count(*))"
" Buffers: shared hit=2298"
" -> Nested Loop (cost=825.40..871.02 rows=9 width=8) (actual time=2.981..38.038 rows=99 loops=1)"
" Output: book_instances.book_id, book_instances.purchase_price"
" Buffers: shared hit=2298"
" -> Group (cost=0.42..10.55 rows=1 width=4) (actual time=0.073..0.096 rows=13 loops=1)"
" Output: application_books.book_id"
" Buffers: shared hit=14"
" -> Index Only Scan using application_books_idx_application_id_book_id on public.application_books (cost=0.42..10.53 rows=7 width=4) (actual time=0.071..0.088 rows=13 loops=1)"
" Output: application_books.application_id, application_books.book_id"
" Index Cond: (application_books.application_id = 46071)"
" Heap Fetches: 11"
" Buffers: shared hit=14"
" -> Bitmap Heap Scan on public.book_instances (cost=824.98..860.46 rows=9 width=8) (actual time=2.912..2.914 rows=8 loops=13)"
" Output: book_instances.book_instance_id, book_instances.book_id, book_instances.invoice_id, book_instances.storage_id, book_instances.book_status, book_instances.application_id, book_instances.purchase_price, book_instances.sale_price, book_i (...)"
" Recheck Cond: ((book_instances.book_id = application_books.book_id) AND (book_instances.book_status = 100))"
" Buffers: shared hit=2284"
" -> BitmapAnd (cost=824.98..824.98 rows=9 width=0) (actual time=2.909..2.909 rows=0 loops=13)"
" Buffers: shared hit=2261"
" -> Bitmap Index Scan on book_instances_idx_book_id (cost=0.00..5.30 rows=292 width=0) (actual time=0.136..0.136 rows=2547 loops=13)"
" Index Cond: (book_instances.book_id = application_books.book_id)"
" Buffers: shared hit=129"
" -> Bitmap Index Scan on book_instances_idx_book_status (cost=0.00..805.04 rows=57536 width=0) (actual time=2.731..2.731 rows=58858 loops=13)"
" Index Cond: (book_instances.book_status = 100)"
" Buffers: shared hit=2132"
"Total runtime: 38.109 ms"


Причем первый подзапрос возвращает 13 строк, а второй 8 строк и этот чертов LEFT JOIN выполняется 29 секунд!

Подскажите куда копать, ничего понять не могу почему изменился план и почему пересечь 13 строк с 8 так медлено работает.
Ответ:
автор
Попробуйте руками analyze сделать на новой базе.

Помогло. Даже стыдно что сам это первым делом не сделал. Спасибо.

А что за прикол с "OFFSET 0" На новой базе стало 60мс, как и раньше и "OFFSET 0" ни на что не влияет, а вот на старой базе запрос с "OFFSET 0" стабильно за 30 мс отрабатывает, без него как и на новой - 60мс
Вопрос: Не заходит (local) после восстановления БД из скрипта бэкапа через коммандную строку

Всем привет! Мое первое сообщение!
Есть острая нужда развернуть базу из MS SQL Server 2008 на MS SQL Server 2005, после изучения вариантов было принято решение сделать это с помощью скрипта бэкапа. Делал впервые и вот что случилось.
С помощью мастера я создал в 2008R2 cкрипт бэкапа бд и для начала, прежде чем в 2005 версию лить, я решил скрипт проверить и выполнить у себя же на 2008R2. Так как размер скрипта составлял 500 Мб, запустить его можно было только с помощью командной строки. Я, не закрывая SSMS, открыл cmd и ввёл:
sqlcmd -s (local) -i C:/backup/backup.sql
После этого, посредине сеанса восстановления по некоторым причинам его пришлось прервать, просто закрыв окно командной строки. И вот что дальше.
После перезагрузки компьютера, при попытке зайти на свой (local) сервер стала появляться ошибка:
"Ошибка входа пользователя "username". MS SQL Server Ошибка 18456".
При этом, я смог подключится к другому какому-то своему локальному серверу с именем в стиле "B1567\ivanovip", где В1567 - это имя компа, ivanovip - имя пользователя, но на этом сервере у меня ни одной базы нет,похоже это какой-то другой локальный сервер, возникают вопросы:

- в чем может быть причина такого поведения? в коммандной строке? в прерывании выполнения скрипта?
- как мне теперь попасть в свой именно (local) сервер?
- могут ли быть аналогичные опасные последствия при попытке влить скрипт бэкапа из 2008 в 2005 версию? Там ооочень важный сервер, не дай бог что случится, или главное не обрывать?


Есть ньюанс, который я также не понимаю, почему-то папка DATA "(local)"-сервера хранится в папке
"....Programm Files\MSSQL\....", тогда как данные отмеченного непонятного пока мне сервера с именем "B1567\ivanovip" хранятся в папке "....Programm Files(х86)\MSSQL\....", это нормально?

Вот, что я еще нашел по этой теме в интернете:
Итак, резюм с описанием проделанных действий:
1. Тормозим службу сервера и запускаем сервер из комндной строки как указано в ссылке, любезно предоставленной iljy.
2. Подключаемся к серверу с использованием DAC
sqlcmd -S <server> -A
3. В случае успеха п.2
create login [<DOMAIN>\User] for windows
go
sp_addsvrrolemember <созданный логин>, 'sysadmin'
go
exit
ВСЕ.


Мне это не помогло, так как теперь подключится теперь (local) я не могу в том числе и из командной строки.

БУДУ РАД ВАШИМ СОВЕТАМ!
Ответ:
Сообщение от ribastar
Я бы с радостью, но у нас используется местный софт для заливки данных, который работает с SQL Server только от 2008 версии.
Причем здесь софт и заливка? Применяйте свои скрипты не на "важном" сервере, а на промежуточном, пока не отладите весь процесс. Потом БД перенесете на "важный" штатными средствами.
Сообщение от ribastar
Можно ли настроить, чтобы физические имена файлов базы делались скриптом другими?
Или может как-то можно изменить имена физических файлов у развернутой БД, чтобы не было конфликта при попытке запустить скрипт восстановления?
Настроить нельзя, но что мешает отредактировать полученный скрипт?
А правильнее вообще исключить скриптование БД и логинов. Создать на целевом сервере БД вручную и применить к ней скрипт.
Вопрос: Надо безумно много места для восстановления БД

ms sql server 2014
требует для восстановления БД размером 25 Гб
650 Гб свободного места...

Это нормально ?
Или что я делаю не так?
Ответ:
тупой ms-sql-admin
Смотрю, после восстановления у этой восстановленной БД
модель восстановления полная.

У оригинальной базы с которой снималась копия
была простая модель восстановления...
Файл лога был такой у оригинальной базы на момент создания бакапа.
Вырос файл лога, скорее всего, из за полной модели восстановления, при том, что не делался бакап лога (хотя возможны и другие варианты, но они менее вероятны).
Разумеется, модель восстановления отресторенной базы такой же, как и оригинальной, так что если вы её не меняли после восстановления, значит, кто то поменял на оригинальной. Действия с оригинальной базой вы можете легко посмотреть в сиквельном логе, такие операции там записываются.
Вопрос: Восстановление БД

Добрый день. Очень нужна помощь. Я новичек в oracle, и как бывает с новичками у нас случаются такие проблемы, на который ни гугл, ни поиск по форуму не дает нужных ответов.
Порядок был такой:
1) В момент работы BD повис запрос update
2) Под sys я срубил все активные сессии (вообще все)
3) Выполнил shutdown immediate - база по преждему висела больше часа
4) Выполнил shutdown abort
5) Startup не увенчался успехом, и выдал неизвестную гуглу ошибку (По крайней мере ответа не нашел)

Итак,
БД делала ежедневные бэкапы в FRA, и работала в режиме arcivelog, однако достигла переполнения FRA в 50 ГБ в следствии большого инсерта данных
ОС - Server 2008 R2, Oracle 11gR2

БД выводит следующее (Как до восстановления, так и после восстановления через
rman
restore database;
recovery database;

БД выводит сообщение на моменте alter database open;


C:\Users\oracle\Desktop>sqlplus.exe sys/XXX AS SYSDBA

SQL*Plus: Release 11.2.0.1.0 Production on Ср Апр 8 11:43:40 2015

Copyright (c) 1982, 2010, Oracle.  All rights reserved.

Соединен с простаивающим экземпляром.

SQL> startup
Экземпляр ORACLE запущен.

Total System Global Area 7315603456 bytes
Fixed Size                  2189888 bytes
Variable Size            4160751040 bytes
Database Buffers         3137339392 bytes
Redo Buffers               15323136 bytes
База данных смонтирована.
ORA-03113: принят сигнал конца файла по коммуникационному каналу
Идентификатор процесса: 2436
Идентификатор сеанса: 5 Порядковый номер: 3


SQL>


----
В файлах trace такая строка
Dump file d:\oracle\product\11.2.0\dbhome_1\rdbms\trace\orcl_ora_764.trc
Wed Apr 08 11:43:45 2015
ORACLE V11.2.0.1.0 - 64bit Production vsnsta=0
vsnsql=16 vsnxtr=3

*** 2015-04-08 11:43:45.209

Oracle Database 11g Release 11.2.0.1.0 - 64bit Production
Windows NT Version V6.1 Service Pack 1 
CPU                 : 4 - type 8664, 2 Physical Cores
Process Affinity    : 0x0x0000000000000000
Memory (Avail/Total): Ph:6886M/7882M, Ph+PgF:14672M/15763M 
Instance name: orcl

Redo thread mounted by this instance: 0 <none>

Oracle process number: 0

Windows thread id: 764, image: ORACLE.EXE (SHAD)



*** 2015-04-08 11:43:45.209

2015-04-08 11:43:45.209: [ default]ut_read_reg:2:ocr registry key SOFTWARE\Oracle\olr cannot be opened. error 2
2015-04-08 11:43:45.209: [ default]ut_read_reg:2:ocr registry key SOFTWARE\Oracle\ocr cannot be opened. error 2



Пробовал заменить NLS_LANG в реестре из этой темы - не помогло (

Спасите пожалуйста всю мою разработку и базу данных ( что мне делать?
Ответ:
Alex2015

Поясните пожалуйста, что же произошло с моей базой?


однако достигла переполнения FRA в 50 ГБ и "зависла".
Вопрос: Вопроc по восстановлению БД на другом сервере MSSQL 2012

Приветствую.
Имею полный бекап файл.
Потребовалось создать тестовый сервер, на нем поднял несколько баз с нуля. работают.
Потребовалось восстановить копию рабочей базы с рабочего сервера.
Делаю восстановление, но пропадает видимо доступ sa к ней после восстановления.
Есть возможность переназначить права на базу не восстанавливая служебные системные базы т.к. тестовая база не одна ?
Спасибо.
Ответ: В точку, один в один ситуация была, когда только начинал осваивать, при переносе sa тоже слетал на 2008 r2
Вопрос: После установки sql 2016 все резко стало тормозить

История:

Сгорел блок питания, поэтому диск с базой пришлось срочно переносить на другой сервер. После восстановления блока питания на старом сервере пришлось поставить sql 2016, потому что при временном переносе база конвертнулась.

Теперь вижу жуткие тормоза, если раньше проц был загружен на 6-7%, сейчас на все 90%, причем это выходные, заходов на сайт в разы меньше.

В чем может быть дело? Единственно что менял - пользователя, но раньше был tcp досту на локал хост, сейчас win authentofocation, т.е. по идее должно быть быстрее. Еще на материнке сбрасывал настройки, но вроде все восстановил, в остальном сервер работает быстро...
Ответ: Смотрите, какой процесс занимает сервер. Если SQL и нагрузка на ЦП - Ваши индексы не годятся и сервер рассчитывает хэши, например.
Смотрите планы запросов, тем обсуждалась много раз - как настроить и где посмотреть.