Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Условие для минимального логирования? / 14 сообщений из 14, страница 1 из 1
20.09.2018, 22:51
    #39705889
Условие для минимального логирования?
Здравствуйте, установлен Sql Server 2916 sp 2. При вставке в heap таблицу table (id int), данные логируются полностью, несмотря на хинт tablock и включенный режим bulk logged. Можно ли это исправить?
...
Рейтинг: 0 / 0
20.09.2018, 23:36
    #39705900
felix_ff
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Условие для минимального логирования?
...
Рейтинг: 0 / 0
21.09.2018, 10:06
    #39705988
Yasha123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Условие для минимального логирования?
ЧеловеческийЗдравствуйте, установлен Sql Server 2916 sp 2. При вставке в heap таблицу table (id int), данные логируются полностью, несмотря на хинт tablock и включенный режим bulk logged. Можно ли это исправить?
репро давайте.
вот мой 2016 SP2 и мое репро,
прескрасно минимально логируется
вставка int в кучу с tablock в модели bulk_logged:

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
create database db_test;

alter database db_test
set recovery bulk_logged;

use db_test;
create table dbo.test(n int);

backup database db_test
to disk = 'C:\backups\sql_2016_dev\db_test.bak';

insert into dbo.test with(tablock) (n)
select top 10000 row_number() over(order by getdate())
from sys.all_columns a1 cross join sys.all_columns a2;

select @@version;

select operation, context, count(*)
from sys.fn_dblog(null, null)
group by operation, context
order by count(*) desc;


operation context (No column name)
LOP_COUNT_DELTA LCX_CLUSTERED 33
LOP_MODIFY_ROW LCX_PFS 26
LOP_SET_FREE_SPACE LCX_PFS 17
LOP_SET_BITS LCX_GAM 9
LOP_SET_BITS LCX_IAM 9
LOP_ROOT_CHANGE LCX_CLUSTERED 5
LOP_COMMIT_XACT LCX_NULL 5
LOP_LOCK_XACT LCX_NULL 5
LOP_BEGIN_XACT LCX_NULL 5
LOP_MODIFY_ROW LCX_BOOT_PAGE 4
LOP_SET_BITS LCX_DIFF_MAP 4
LOP_HOBT_DELTA LCX_NULL 4
LOP_SET_BITS LCX_ML_MAP 3
LOP_END_CKPT LCX_NULL 2
LOP_XACT_CKPT LCX_BOOT_PAGE_CKPT 2
LOP_FORMAT_PAGE LCX_HEAP 1
LOP_SHRINK_NOOP LCX_DIAGNOSTICS 1
LOP_CREATE_ALLOCCHAIN LCX_NULL 1
LOP_FORMAT_PAGE LCX_IAM 1
LOP_BEGIN_CKPT LCX_NULL 1

как видите, в лог вообще не ушло никаких операций в контексте кучи.
все, что меняется, это PFS, GAM, IAM и маленько системных таблиц
...
Рейтинг: 0 / 0
21.09.2018, 10:41
    #39706008
Androgen1985
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Условие для минимального логирования?
Данные в heap есть?

Вот ознакомьтесь со статьей здесь приведены различные варианты и указана возможность минимального протоколирования http://www.sqlservercentral.com/articles/Administration/100856/
...
Рейтинг: 0 / 0
21.09.2018, 10:49
    #39706016
Yasha123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Условие для минимального логирования?
Androgen1985 Данные в heap есть?

Вот ознакомьтесь со статьей здесь приведены различные варианты и указана возможность минимального протоколирования
вы сами-то ознакомились с содержимым своей же ссылки?
хоть есть, хоть нет данных, это же КУЧА.
все новые данные пойдут на новые же стрницы.
ну сделайте в моем репро предварительную вставку в кучу,
чтобы не была пустой.
ничего не поменяется.
...
Рейтинг: 0 / 0
21.09.2018, 20:00
    #39706278
Условие для минимального логирования?
Yasha123,

Если в вашем примере закомментировать подстроку "-- cross join sys.all_columns a2" у меня логируется полностью.
...
Рейтинг: 0 / 0
23.09.2018, 21:19
    #39706674
Yasha123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Условие для минимального логирования?
ЧеловеческийYasha123,

Если в вашем примере закомментировать подстроку "-- cross join sys.all_columns a2" у меня логируется полностью.
конкретно сколько строк(страниц) вы вставляете? 100 строк/1 страницу?
...
Рейтинг: 0 / 0
24.09.2018, 15:10
    #39707106
Условие для минимального логирования?
Yasha123,
9542 строки

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
create database db_test;
go
alter database db_test
set recovery bulk_logged;

use db_test;
create table dbo.test(n int);

backup database db_test
to disk = 'C:\backups\sql_2016_dev\db_test.bak';

insert into dbo.test with(tablock) (n)
select top 10000 row_number() over(order by getdate())
from sys.all_columns a1 --cross join sys.all_columns a2;

select @@version;

select operation, context, count(*)
from sys.fn_dblog(null, null)
group by operation, context
order by count(*) desc;



Код: sql
1.
2.
Microsoft SQL Server 2016 (SP2) (KB4052908) - 13.0.5026.0 (X64)   Mar 18 2018 09:11:49
Copyright (c) Microsoft Corporation  Developer Edition (64-bit) on Windows 10 Pro 10.0 <X64> (Build 16299: ) 



LOP_INSERT_ROWS LCX_HEAP 9542
LOP_SET_FREE_SPACE LCX_PFS 61
LOP_BEGIN_XACT LCX_NULL 24
LOP_COMMIT_XACT LCX_NULL 24
LOP_LOCK_XACT LCX_NULL 23
LOP_MODIFY_ROW LCX_PFS 22
LOP_HOBT_DELTA LCX_NULL 19
LOP_FORMAT_PAGE LCX_HEAP 16
LOP_INSYSXACT LCX_CLUSTERED 12
LOP_INSERT_ROWS LCX_CLUSTERED 11
LOP_SET_BITS LCX_DIFF_MAP 11
LOP_INSERT_ROWS LCX_INDEX_LEAF 6
LOP_MODIFY_HEADER LCX_HEAP 4
LOP_INSYSXACT LCX_INDEX_INTERIOR 4
LOP_SHRINK_NOOP LCX_NULL 3
LOP_MODIFY_ROW LCX_CLUSTERED 3
LOP_SET_BITS LCX_IAM 3
LOP_ROOT_CHANGE LCX_CLUSTERED 3
LOP_SET_BITS LCX_GAM 3
LOP_FORMAT_PAGE LCX_CLUSTERED 2
LOP_MODIFY_ROW LCX_BOOT_PAGE_CKPT 2
LOP_DELETE_SPLIT LCX_CLUSTERED 2
LOP_INSERT_ROWS LCX_INDEX_INTERIOR 2
LOP_PREP_XACT LCX_NULL 1
LOP_END_CKPT LCX_NULL 1
LOP_CREATE_ALLOCCHAIN LCX_NULL 1
LOP_FORMAT_PAGE LCX_IAM 1
LOP_FILE_HDR_MODIFY LCX_FILE_HEADER 1
LOP_XACT_CKPT LCX_BOOT_PAGE_CKPT 1
LOP_MODIFY_COLUMNS LCX_CLUSTERED 1
LOP_BEGIN_CKPT LCX_NULL 1
...
Рейтинг: 0 / 0
24.09.2018, 17:43
    #39707222
Yasha123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Условие для минимального логирования?
Человеческий,
значит, 16 страниц это тоже пшик, а не балк
...
Рейтинг: 0 / 0
24.09.2018, 17:54
    #39707228
Условие для минимального логирования?
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
create database db_test;
go
alter database db_test
set recovery bulk_logged;

use db_test;
create table dbo.test(n int, name varchar(100));

backup database db_test
to disk = 'C:\backups\sql_2016_dev\db_test.bak' with init

insert into dbo.test with(tablock) (n)
select top 10000 row_number() over(order by getdate())
from sys.all_columns a1 --cross join sys.all_columns a2;

select @@version;

select operation, context, count(*)
from sys.fn_dblog(null, null)
group by operation, context
order by count(*) desc;



LOP_MODIFY_ROW LCX_PFS 30
LOP_SET_FREE_SPACE LCX_PFS 16
LOP_SET_BITS LCX_DIFF_MAP 13
LOP_INSYSXACT LCX_CLUSTERED 12
LOP_INSERT_ROWS LCX_CLUSTERED 11
LOP_SET_BITS LCX_GAM 10
LOP_SET_BITS LCX_IAM 10
LOP_COMMIT_XACT LCX_NULL 9
LOP_BEGIN_XACT LCX_NULL 9
LOP_LOCK_XACT LCX_NULL 8
LOP_HOBT_DELTA LCX_NULL 6
LOP_INSERT_ROWS LCX_INDEX_LEAF 6
LOP_ROOT_CHANGE LCX_CLUSTERED 5
LOP_MODIFY_HEADER LCX_HEAP 4
LOP_INSYSXACT LCX_INDEX_INTERIOR 4
LOP_SHRINK_NOOP LCX_NULL 3
LOP_MODIFY_ROW LCX_CLUSTERED 3
LOP_SET_BITS LCX_ML_MAP 3
LOP_FORMAT_PAGE LCX_CLUSTERED 2
LOP_MODIFY_ROW LCX_BOOT_PAGE_CKPT 2
LOP_DELETE_SPLIT LCX_CLUSTERED 2
LOP_INSERT_ROWS LCX_INDEX_INTERIOR 2
LOP_PREP_XACT LCX_NULL 1
LOP_END_CKPT LCX_NULL 1
LOP_CREATE_ALLOCCHAIN LCX_NULL 1
LOP_FORMAT_PAGE LCX_IAM 1
LOP_FILE_HDR_MODIFY LCX_FILE_HEADER 1
LOP_BEGIN_CKPT LCX_NULL 1
LOP_FORMAT_PAGE LCX_HEAP 1
LOP_MODIFY_COLUMNS LCX_CLUSTERED 1
LOP_XACT_CKPT LCX_BOOT_PAGE_CKPT 1
...
Рейтинг: 0 / 0
24.09.2018, 18:16
    #39707242
Yasha123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Условие для минимального логирования?
Человеческий
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
create database db_test;
go
alter database db_test
set recovery bulk_logged;

use db_test;
create table dbo.test(n int, name varchar(100));

backup database db_test
to disk = 'C:\backups\sql_2016_dev\db_test.bak' with init

insert into dbo.test with(tablock) (n)
select top 10000 row_number() over(order by getdate())
from sys.all_columns a1 --cross join sys.all_columns a2;

select @@version;

select operation, context, count(*)
from sys.fn_dblog(null, null)
group by operation, context
order by count(*) desc;



LOP_MODIFY_ROW LCX_PFS 30
LOP_SET_FREE_SPACE LCX_PFS 16
LOP_SET_BITS LCX_DIFF_MAP 13
LOP_INSYSXACT LCX_CLUSTERED 12
LOP_INSERT_ROWS LCX_CLUSTERED 11
LOP_SET_BITS LCX_GAM 10
LOP_SET_BITS LCX_IAM 10
LOP_COMMIT_XACT LCX_NULL 9
LOP_BEGIN_XACT LCX_NULL 9
LOP_LOCK_XACT LCX_NULL 8
LOP_HOBT_DELTA LCX_NULL 6
LOP_INSERT_ROWS LCX_INDEX_LEAF 6
LOP_ROOT_CHANGE LCX_CLUSTERED 5
LOP_MODIFY_HEADER LCX_HEAP 4
LOP_INSYSXACT LCX_INDEX_INTERIOR 4
LOP_SHRINK_NOOP LCX_NULL 3
LOP_MODIFY_ROW LCX_CLUSTERED 3
LOP_SET_BITS LCX_ML_MAP 3
LOP_FORMAT_PAGE LCX_CLUSTERED 2
LOP_MODIFY_ROW LCX_BOOT_PAGE_CKPT 2
LOP_DELETE_SPLIT LCX_CLUSTERED 2
LOP_INSERT_ROWS LCX_INDEX_INTERIOR 2
LOP_PREP_XACT LCX_NULL 1
LOP_END_CKPT LCX_NULL 1
LOP_CREATE_ALLOCCHAIN LCX_NULL 1
LOP_FORMAT_PAGE LCX_IAM 1
LOP_FILE_HDR_MODIFY LCX_FILE_HEADER 1
LOP_BEGIN_CKPT LCX_NULL 1
LOP_FORMAT_PAGE LCX_HEAP 1
LOP_MODIFY_COLUMNS LCX_CLUSTERED 1
LOP_XACT_CKPT LCX_BOOT_PAGE_CKPT 1

и что? вы не строки считайте, а страницы
...
Рейтинг: 0 / 0
24.09.2018, 18:30
    #39707249
Yasha123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Условие для минимального логирования?
пардон, все те же 16 страниц.
Наверное, товарищи оценили как и я, читая по диагонали, т. е. видимо код сервера не оценивает реально вставляемое, а делает оценку максимальной возможной заполненности, исходя из метаданных таблицы
...
Рейтинг: 0 / 0
24.09.2018, 20:17
    #39707285
Andy_OLAP
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Условие для минимального логирования?
ЧеловеческийYasha123,

Если в вашем примере закомментировать подстроку "-- cross join sys.all_columns a2" у меня логируется полностью.
Ну что Вы с Анной спорите. Ее не переубедить.
Делаете проще - файл базы на диск C, файл журнала на диск D. Создаете таблицу с кластерным индексом, вставляете из другой плоской таблицы строки, замеряете "fsutil fsinfo statistics c:" и "fsutil fsinfo statistics d:" до операции и после операции. Проверяете UserFileWriteBytes. Далее создаете таблицу-heap и из той же таблицы вставляете такое же количество строк. И аналогично замеряете до и после операции.
По количеству байт, записанных на диск D, смотрите, сколько реально windows записала в файл журнала транзакций. И думаете дальше.
P.S. Таки логично при этом отключить индексацию, антивирус и прочее.
...
Рейтинг: 0 / 0
24.09.2018, 21:07
    #39707301
Yasha123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Условие для минимального логирования?
Andy_OLAP...
дарагуля,
ты за мной разве что в туалет не сбегал, угомонись уже,
неси свой бред там, где меня нет.
заранее спасибо
---
Человеческий, подытожим.
для минимального логирования есть еще и некий "объемный" порог,
в документации вроде нигде не упоминается,
но это логично, что он есть.
и перед вставкой ее предполагаемый объем высчитывают как число строк * макс. длину строки для данной таблицы
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Условие для минимального логирования? / 14 сообщений из 14, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]