メモ 列ストアインデックス デルタストアのページの中身

三木会でデモしたクエリのメモ

select
  OBJECT_NAME(d.object_id) as table_name
  , ip.internal_object_type_desc
  , d.allocated_page_page_id as page_id
  , d.page_type
  , d.page_type_desc
from
sys.dm_db_database_page_allocations(db_id(), object_id('cci'), 1, null, 'DETAILED') d 
inner join sys.internal_partitions ip on d.rowset_id = ip.hobt_id and d.object_id = ip.object_id
where ip.internal_object_type_desc = 'COLUMN_STORE_DELTA_STORE'

f:id:odashinsuke:20170320122859j:plain
これでとれた page_id を 次のクエリに渡す。

dbcc traceon(3604)
dbcc page('CCI_Sample', 1, 143616, 3) with tableresults
dbcc traceoff(3604)

select * from cci where c1 = 1000

f:id:odashinsuke:20170320123004j:plain
テーブルデータと並べてみる。

列ストアインデックスのメタ情報を取るクエリのメモ

幾つかメモ。

行グループ

select 
  object_name(object_id) as table_name
  , * 
from 
  sys.column_store_row_groups
where 
  OBJECT_NAME(object_id) = 'table_name'

sys.column_store_row_groups (Transact-SQL)

列セグメント

select
  object_name(p.object_id) as table_name
  , c.name as column_name
  , css.*
from
  sys.column_store_segments css
  left join sys.partitions p on p.hobt_id = css.hobt_id and p.partition_id = css.partition_id
  left join sys.indexes ind on p.index_id = ind.index_id and p.object_id = ind.object_id
  left join sys.index_columns indc on indc.object_id = ind.object_id and indc.index_id = ind.index_id and indc.index_column_id = css.column_id
  left join sys.columns c on c.column_id = indc.column_id and c.object_id = p.object_id
where
  object_name(p.object_id) = 'table_name'

sys.column_store_segments (Transact-SQL)

デルタストア、削除済ビットマップ、削除バッファーとか

select 
  object_name(object_id) as table_name 
  , * 
from sys.internal_partitions
where
  object_name(object_id) = 'table_name'

sys.internal_partitions (TRANSACT-SQL)

三木会で列ストアインデックスのお話しをしました

[2017/03/16(木): 三木会] SQL Server の 列ストアインデックス 入門 | Insight Technology, Inc. で、列ストアインデックス 入門のお話しをしてきました。
前半は列ストアインデックスとはどんなものかと、今までのテーブルと何が違うのかの概要で、後半は更新処理や検索処理の中の動きをデモを中心にお話ししました。

スライドはこちら

この勉強会で話すために、久しぶりに列ストアを調べましたが 2014 から 2016 で結構変わっててへーって感じでした。

調べた内容はちょくちょくブログに書いていこうと思います。

3/16(木) 三木会 で 列ストアインデックスのお話しします

3/16(木) Insight Technology 様が主催している 三木会 で SQL Server の列ストアインデックス のお話しをさせていただきます。
[2017/03/16(木): 三木会] SQL Server の 列ストアインデックス 入門 | Insight Technology, Inc.
内容は 列ストアって何?ってところから順に掘り下げていく予定です。
梅田のグランフロントで開催しますのでお近くの方は是非ご参加を~。

Application Insights JavaScript browserTimings の メモ

networkDuration / sendDuration / receivedDuration / prosessiongDuration とかって何の時間かっての調べた時のメモ。
ApplicationInsights-JS/PageViewPerformance.ts at 4620cfdc47975f2e32e82f63c693f9b88fa50568 · Microsoft/ApplicationInsights-JS · GitHub

ソースのコメント見たかんじ、本家はここなんかな?
Navigation Timing

Japanese_XJIS_140 って _SC 指定出来ないけど、どないなん?

SQL Server 2012 で追加された照合順序で何ができるようになった? at SE の雑記

の検証クエリを拝借しました。

CREATE TABLE dbo.TblTest
(
Col1 nvarchar(50) COLLATE Japanese_XJIS_100_CI_AS NULL,
Col2 nvarchar(50) COLLATE Japanese_XJIS_100_CI_AS_SC NULL,
Col3 nvarchar(50) COLLATE Japanese_XJIS_140_CI_AS NULL
)
GO

INSERT INTO TblTest VALUES(N'森鷗外𠮟る', N'森鷗外𠮟る', N'森鷗外𠮟る')
INSERT INTO TblTest VALUES(N'森鴎外叱る', N'森鴎外叱る', N'森鴎外叱る')

SELECT LEFT(Col1, 4), LEFT(Col2, 4), LEFT(Col3, 4),* FROM TblTest
SELECT * FROM TblTest WHERE Col1 LIKE N'森鷗外_る'
SELECT * FROM TblTest WHERE Col2 LIKE N'森鷗外_る'
SELECT * FROM TblTest WHERE Col3 LIKE N'森鷗外_る'

_SC ありの時と同じ動作のように見えますね。

照合順序に KI、WI はないですよー

照合順序について調べてて、KI、WI について書いてるページがあったので。
正しくは、省略して何も指定しないです。

例:列の照合順序を変える

-- 全部区別する場合
alter table t alter column col char(10) collate JAPANESE_XJIS_140_CS_AS_KS_WS
-- 全部区別しない場合
alter table t alter column col char(10) collate JAPANESE_XJIS_140_CI_AI

SQL Server の照合順序 - マイクロソフト系技術情報 Wiki
このサイトが参考にしているサイトが
照合順序 – 文字の比較と並び順 (その 1) – Microsoft SQL Server Japan Support Team Blog
でした。
Team Blog じゃないですかーということで、コメントで連絡してみました。
そのうち直るはず。

公式はこちらで。
照合順序と Unicode のサポート

vNext と SQL DB(v12) で、Japanese_XJIS_140 が使えるようになってるけど、_SC 指定できない。
どっちの動作になってるのかな?後で試す。