SlideShare uma empresa Scribd logo
1 de 71
© 2017 Delphix. All Rights Reserved. Private and Confidential.© 2017 Delphix. All Rights Reserved. Private and Confidential.
Kellyn Pot’Vin-Gorman | Technical Intelligence Manager| January, 2018
War of the Indices
SQL Server vs. Oracle
© 2017 Delphix. All Rights Reserved. Private and Confidential.
Kellyn Pot’Vin-Gorman
Technical Intelligence Manager, Delphix
• Multi-platform DBA, (Oracle, MSSQL, MySQL, Sybase,
PostgreSQL, Informix…)
• Oracle ACE Director, (Alumni)
• Oak Table Network Member
• Idera ACE 2018
• APEX Women in Technology Award, CTA
• STEM education with Raspberry Pi and Python,
including DevOxx4Kids, Oracle Education Foundation
and TechGirls
• President, Rocky Mtn Oracle User Group
• President, Denver SQL Server User Group
• DevOps author, instructor and presenter.
• Author, blogger, (http://dbakevlar.com)
© 2017 Delphix. All Rights Reserved. Private and Confidential.
3
Agenda
Background1
Platform Translations2
Test Case and Goal3
Code and Discussion4
Analysis and Summary5
© 2017 Delphix. All Rights Reserved. Private and Confidential.
Azure SQL
Database
AWS with Oracle
11.2.0.4
The What- Version 1
© 2017 Delphix. All Rights Reserved. Private and Confidential.
The What- Version 2
© 2017 Delphix. All Rights Reserved. Private and Confidential.
• Its interesting…to me, at
least.
• VM was an issue, so moved
everything to the cloud and
also worked with Docker.
• Two major players in the
database landscape.
• Good apples to “apfel”
comparison.
The Why
© 2017 Delphix. All Rights Reserved. Private and Confidential.
Indexing
• An Index, like an index in a book references data.
SQL Server Indexes
• Clustered Index contains data, one per table
• Non-clustered is just pointers and a table can have up to 999, (version dependent)
• No Clustered index results in table referred to as a heap table.
• Clustered index is sorted upon original build
Oracle
• All indexes are by default heap
• Index OrganizedTable, (IOT) is closest to a SQL Server Index
• Multiple complex objects to compare to SQL Server
• ROWID is a game changer
© 2017 Delphix. All Rights Reserved. Private and Confidential.
Similar at
High Level
OracleVs. SQL Server
Index = Clustered Index
© 2017 Delphix. All Rights Reserved. Private and Confidential.
Translations Graph
Query
Insert
© 2017 Delphix. All Rights Reserved. Private and Confidential.
Different
Architecture
© 2017 Delphix. All Rights Reserved. Private and Confidential.
FILLFACTOR is a setting for indexes in SQL Server. When you
create or rebuild an index, you can tell SQL Server what
percentage of each 8K data page used in the “leaf” level of the
index it should fill up. Default is 80 percent, but for non-OLTP,
often recommended to be 100.
Fill Factor in SQL Server
© 2017 Delphix. All Rights Reserved. Private and Confidential.
PCT Free in Oracle
PCTFREE is a block storage parameter used to specify how much
space should be left in a database block for future updates. For
example, for PCTFREE=10, Oracle will keep on adding new rows to
a block until it is 90% full. This leaves 10% for future updates (row
expansion). This defaults to 10% for indexes, but can be adjusted
via a index rebuild.
© 2017 Delphix. All Rights Reserved. Private and Confidential.
SQL Server Index Writes- Not Subject to Page Splits
© 2017 Delphix. All Rights Reserved. Private and Confidential.
SQL Server Index Processing Impacted by Random
© 2017 Delphix. All Rights Reserved. Private and Confidential.
In What Case Would You Rebuild?
• Significant # of logically deleted
index nodes.
• Inefficient number of gets per access
So yes, there are times and situations
you need to rebuild.
The goal here is to see where each
platform performs better than the
other.
Fragmentation Doesn’t Exist in Oracle Indexes?
© 2017 Delphix. All Rights Reserved. Private and Confidential.
Test Case
• Create a table with three columns and two indexes.
• Insert, update and delete different amounts of data.
• check the storage of our index and any fragmentation, storage
anomalies.
• Repeat
• Check the storage repeatedly to see how it has changed- page
splits in SQL Server, leaf block splits in Oracle
© 2017 Delphix. All Rights Reserved. Private and Confidential.
Goal
1. Inspect the differences and similarities of indexing in both
platforms
2. The pros and cons of how index data is stored and used in the
database platforms.
• http://dbakevlar.com/2017/04/oracle-sql-server-index-comparison/
© 2017 Delphix. All Rights Reserved. Private and Confidential.
First Test, Build and Check
© 2017 Delphix. All Rights Reserved. Private and Confidential.
Oracle Objects
CREATE TABLE ORA_INDEX_TST
(
C1 NUMBER NOT NULL
,C2 VARCHAR2(255)
,CREATEDATE TIMESTAMP DEFAULT CURRENT_TIMESTAMP)
;CREATE INDEX PK_INDEXPS ON ORA_INDEX_TST (C1);
CREATE INDEX IDX_INDEXPS ON ORA_INDEX_TST (C2);
ALTER TABLE ORA_INDEX_TST ADD CONSTRAINT OIT_PK
PRIMARY KEY(C1) USING INDEX PK_INDEXPS;
ALTER INDEX IDX_INDEXPS REBUILD PCTFREE 20 INITRANS 5;
ALTER INDEX PK_INDEXPS REBUILD PCTFREE 20 INITRANS 5;
© 2017 Delphix. All Rights Reserved. Private and Confidential.
Oracle Support Objects
CREATE SEQUENCE C1_SEQ START WITH 1;
CREATE OR REPLACE TRIGGER C1_BIR
BEFORE INSERT ON ORA_INDEX_TST
FOR EACH ROW
BEGIN
SELECT C1_SEQ.NEXTVAL
INTO :new.C1
FROM DUAL;
END;
/
© 2017 Delphix. All Rights Reserved. Private and Confidential.
Insert 7 Rows to Fill One Oracle Block
INSERT INTO ORA_INDEX_TST (C2, CREATEDATE)
VALUES (dbms_random.string('A', 200), SYSDATE);
INSERT INTO ORA_INDEX_TST (C2, CREATEDATE)
……
……
INSERT INTO ORA_INDEX_TST (C2, CREATEDATE)
VALUES (dbms_random.string('F', 200), SYSDATE);
INSERT INTO ORA_INDEX_TST (C2, CREATEDATE)
VALUES (dbms_random.string('G', 200), SYSDATE);
COMMIT;
© 2017 Delphix. All Rights Reserved. Private and Confidential.
Check the Block
SQL> ANALYZE INDEX PK_INDEXPS VALIDATE STRUCTURE;
SQL> SELECT LF_BLKS, LF_BLK_LEN, DEL_LF_ROWS,USED_SPACE,
PCT_USED FROM INDEX_STATS where NAME='PK_INDEXPS';
LF_BLKS LF_BLK_LEN DEL_LF_ROWS USED_SPACE PCT_USED
---------- ---------- ----------- ---------- --------
1 7924 0 1491 19
As expected- 1 leaf block for the seven
rows.
© 2017 Delphix. All Rights Reserved. Private and Confidential.
Adjust Index and Then
Insert 8th Row
ALTER INDEX IDX_INDEXPS REBUILD PCTFREE 90
INITRANS 5;
• Yes, we’ve just adjusted the pctfree to 90%!
• Consider what this will do to our index storage now
that we’ve rebuilt this allowing for only 10% usage in
each block.
• Insert the 8th row:
INSERT INTO ORA_INDEX_TST (C2, CREATEDATE)
VALUES (dbms_random.string(‘H', 200),
SYSDATE);
© 2017 Delphix. All Rights Reserved. Private and Confidential.
After Change to Pct Free
SQL> ANALYZE INDEX PK_INDEXPS VALIDATE STRUCTURE;
SQL> SELECT LF_BLKS, LF_BLK_LEN, DEL_LF_ROWS,USED_SPACE,
PCT_USED FROM INDEX_STATS where NAME='PK_INDEXPS';
LF_BLKS LF_BLK_LEN DEL_LF_ROWS USED_SPACE PCT_USED
---------- ---------- ----------- ----------
8 8229 0 2369 12
Query Time Increase: 2.1 Times Slower
© 2017 Delphix. All Rights Reserved. Private and Confidential.
SQL Server’s Turn
© 2017 Delphix. All Rights Reserved. Private and Confidential.
SQL Server Objects
CREATE TABLE SQL_INDEX_TST (c1 INT NOT NULL,
c2 CHAR (255),
createdate DATETIME NOT NULL DEFAULT GETDATE());
CREATE INDEX CL2_INDEX_TST ON SQL_INDEX_TST(C2);
GO
ALTER TABLE SQL_INDEX_TST
ADD CONSTRAINT PK_CLINDX_TST PRIMARY KEY CLUSTERED (c1);
© 2017 Delphix. All Rights Reserved. Private and Confidential.
Insert 7 Rows to Fill up Initial SQL Server
Page
INSERT INTO SQL_INDEX_TST(c1,c2) VALUES (1, 'a');
INSERT INTO SQL_INDEX_TST(c1,c2) VALUES (2, 'a');
INSERT INTO SQL_INDEX_TST(c1,c2) VALUES (3, 'a');
INSERT INTO SQL_INDEX_TST(c1,c2) VALUES (4, 'a');
INSERT INTO SQL_INDEX_TST(c1,c2) VALUES (6, 'a');
INSERT INTO SQL_INDEX_TST(c1,c2) VALUES (7, 'a');
GO
© 2017 Delphix. All Rights Reserved. Private and Confidential.
Check Statistics and Page Data on Index
SELECT
OBJECT_SCHEMA_NAME(ios.object_id) + '.' +
OBJECT_NAME(ios.object_id) as table_name,
i.name as index_name, leaf_allocation_count,
nonleaf_allocation_count
FROM sys.dm_db_index_operational_stats(DB_ID(),
OBJECT_ID('dbo.SQL_INDEX_TST'),NULL, NULL) ios
INNER JOIN sys.indexes i ON i.object_id =
ios.object_id AND i.index_id = ios.index_id;
© 2017 Delphix. All Rights Reserved. Private and Confidential.
Results
© 2017 Delphix. All Rights Reserved. Private and Confidential.
Alter Index Fillfactor and Insert 8th Row
ALTER INDEX CL_INDEX_TST ON dbo.SQL_Index_tst
REBUILD WITH (FILLFACTOR = 10);
GO
Now insert the 8th row in:
INSERT INTO SQL_INDEX_TST(c1,c2) VALUES (8, 'a');
GO
© 2017 Delphix. All Rights Reserved. Private and Confidential.
Results
LeafAllocationCount: 8
Fill Factor: 10
QueryTime Increase: 2.3Times
SLOWER
© 2017 Delphix. All Rights Reserved. Private and Confidential.
Second Test, Build and Check
© 2017 Delphix. All Rights Reserved. Private and Confidential.
Data Loads into Oracle
SQL> Begin
For IDS in 1..1000000
Loop
INSERT INTO ORA_INDEX_TST (C2, CREATEDATE)
VALUES (dbms_random.string('X', 200), SYSDATE);
Commit;
End loop;
End;
/
© 2017 Delphix. All Rights Reserved. Private and Confidential.
Check Data and Delete Data
SQL> select count(*) from ora_index_tst;
COUNT(*)
----------
1000008
SQL> delete from ora_index_tst
where c2 like '%200%';
437 rows deleted.
SQL> commit;
Commit complete.
10% PCT Free- Time Elapsed 2 minutes, 12 seconds
90% PCT Free- Time Elapsed 7 minutes, 3 seconds
© 2017 Delphix. All Rights Reserved. Private and Confidential.
Resulting Index Fragmentation and Storage
SELECT LF_BLKS, LF_BLK_LEN, DEL_LF_ROWS,USED_SPACE, PCT_USED FROM
INDEX_STATS;
© 2017 Delphix. All Rights Reserved. Private and Confidential.
Ending Row Count
© 2017 Delphix. All Rights Reserved. Private and Confidential.
Check Index
© 2017 Delphix. All Rights Reserved. Private and Confidential.
SQL Server’s Turn
© 2017 Delphix. All Rights Reserved. Private and Confidential.
SQL Server Insert
declare @id int
select @id = 9 --already inserted 8 rows
while @id >= 0 and @id <= 1000000
begin
insert into sql_index_tst (c1,c2) values(@id,
'DKUELKJ' + convert(varchar(7), @id))
select @id = @id + 1
end
Default Fill Factor- Elapsed Time: 4 minutes, 43
seconds
10% Fill Factor- Elapsed time: 23 minutes, 18 seconds
© 2017 Delphix. All Rights Reserved. Private and Confidential.
Check Page Splits in SQL Server
SELECT
OBJECT_SCHEMA_NAME(ios.object_id) + '.' +
OBJECT_NAME(ios.object_id) as table_name
,i.name as index_name
,leaf_allocation_count
,nonleaf_allocation_count
FROM sys.dm_db_index_operational_stats(DB_ID(),
OBJECT_ID('dbo.SQL_Index_tst'),NULL, NULL) ios
INNER JOIN sys.indexes i ON i.object_id = ios.object_id
AND i.index_id = ios.index_id;
© 2017 Delphix. All Rights Reserved. Private and Confidential.
Page Splits Observed
© 2017 Delphix. All Rights Reserved. Private and Confidential.
Check Fragmentation in SQL Server
SELECT
OBJECT_SCHEMA_NAME(ips.object_id) + '.' +
OBJECT_NAME(ips.object_id) as table_name
,ips.avg_fragmentation_in_percent
,ips.fragment_count
,page_count
FROM sys.dm_db_index_physical_stats(DB_ID(),
OBJECT_ID('dbo.SQL_Index_tst'
© 2017 Delphix. All Rights Reserved. Private and Confidential.
Fragmentation Results
© 2017 Delphix. All Rights Reserved. Private and Confidential.
Third Test, Build and Check
© 2017 Delphix. All Rights Reserved. Private and Confidential.
• Oracle Index Organized Tables are
most similar to SQL Server
Clustered Indexes.
• How do those compare?
Clustered Indexes
vs. Oracle IOTs
© 2017 Delphix. All Rights Reserved. Private and Confidential.
• Variation of a primary b-
tree index
• The index IS the table
• Data is sorted
Index Organized Table,
(IOT)
© 2017 Delphix. All Rights Reserved. Private and Confidential.
Oracle IOT Syntax
CREATE TABLE ora_tst_iot(
c1 NUMBER,
c2 varchar2(255),
CREATEDATE timestamp DEFAULT CURRENT_TIMESTAMP,
CONSTRAINT pk_ora_iot PRIMARY KEY (c1))
ORGANIZATION INDEX
TABLESPACE users
PCTFREE 20
OVERFLOW TABLESPACE users;
© 2017 Delphix. All Rights Reserved. Private and Confidential.
• Created Sequence for PK on C1 column
• Created Trigger to insert next value in C1 on insert.
• The % Threshold set to 20
• No compression
• Loaded from my original table ORA_INDEX_TST
Supporting Features
© 2017 Delphix. All Rights Reserved. Private and Confidential.
Data Load and Validation
© 2017 Delphix. All Rights Reserved. Private and Confidential.
Remove Data-
© 2017 Delphix. All Rights Reserved. Private and Confidential.
IOT
Vulnerabilities SQL> SELECT 'Chained or Migrated
Rows = '||value
FROM v$sysstat
WHERE name = 'table fetch
continued row';
Chained or Migrated Rows = 73730
© 2017 Delphix. All Rights Reserved. Private and Confidential.
Findings
C2 column has
significant data and
without C1, has a
difficult time for
access.
Disable trigger for
sequence and then
load table with
simplified data,
then rebuild.
ALTER TABLE ORA_IOT_TST REBUILD;
© 2017 Delphix. All Rights Reserved. Private and Confidential.
After Issuing a Move Statement on an IOT
Tablespace
Extent
Block
Row
After Move
Command
© 2017 Delphix. All Rights Reserved. Private and Confidential.
© 2017 Delphix. All Rights Reserved. Private and Confidential.
• As discussed, Pct Free is how much free is to be left at the end of a
block…90%...hmm…
So PCT Free
© 2017 Delphix. All Rights Reserved. Private and Confidential.
• 10% Fill Factor in SQL Server and 1 million insert: Elapsed time: 23 minutes,
18 seconds
• 90% PCTFree in Oracle and 1 million insert: 7 min, 12 seconds
• 100% Fill Factor in SQL Server and 1 million insert: Elapsed Time: 4
minutes, 43 seconds
• 0% PCTFree in Oracle and 1 million insert: 1 min, 8 seconds
• REBUILD of the Oracle IOT to make it 90% free in each block? Elapsed
Time: 8 hrs, 21 minutes, 12 seconds
Comparisons- Pct Free Vs. Fill Factor
© 2017 Delphix. All Rights Reserved. Private and Confidential.
Column Store Indexes
© 2017 Delphix. All Rights Reserved. Private and Confidential.
Columnstore
Indexes
© 2017 Delphix. All Rights Reserved. Private and Confidential.
Create Our Columnstore Index
CREATE CLUSTERED COLUMNSTORE index SQLIDX_TST_CI on
SQL_INDEX_TST WITH (DROP_EXISTING = ON);
Check Viable:
SELECT * FROM sys.tables WHERE is_memory_optimized=1;
SELECT * FROM sys.table_types WHERE
is_memory_optimized=1 SELECT * FROM sys.sql_modules
WHERE uses_native_compilation=1;
GO
© 2017 Delphix. All Rights Reserved. Private and Confidential.
Test Query Performance
SQL Server with Query: Elapsed time: 2.6 seconds
SELECT C1 FROM SQL_INDEX_TST
WHERE C1 BETWEEN 80000 and 98000;
GO
> 17421 rows
© 2017 Delphix. All Rights Reserved. Private and Confidential.
How Oracle Architecture is Different
Simpler to turn on than SQL
Server’s
1
Columnar indexes are built
dynamically in-memory
2
© 2017 Delphix. All Rights Reserved. Private and Confidential.
Turn on Oracle In-Memory
ALTER SYSTEM SET INMEMORY_SIZE=2G SCOPE=SPFILE;
(Restart)
SQL> SHOW PARAMETER INMEMORY
NAME TYPE VALUE
------------------------------------ ----------- -----
------------------------- inmemory_clause_default
string
inmemory_force string DEFAULT
inmemory_max_populate_servers integer 1
inmemory_query string ENABLE
inmemory_size big integer 2G I
nmemory_trickle_repopulate_servers_ integer 1 percent
optimizer_inmemory_aware boolean TRUE
© 2017 Delphix. All Rights Reserved. Private and Confidential.
Create Table for In-Memory
CREATE TABLE IM_IDX_TST as select * from ORA_INDEX_TST INMEMORY
MEMCOMPRESS FOR QUERY HIGH(c1);
SELECT table_name, inmemory, inmemory_priority, inmemory_distribute,
inmemory_compression FROM user_tables WHERE TABLE_NAME in
(‘ORA_INDEX_TST’,’IM_IDX_TST’);
TABLE_NAME INMEMORY INMEMORY INMEMORY_DISTRI INMEMORY_COMPRESS
------------------- -------- -------- --------------- ---------------
ORA_INDEX_TST DISABLED
IM_IDX_TST ENABLED NONE AUTO FOR QUERY LOW NO
© 2017 Delphix. All Rights Reserved. Private and Confidential.
Test Query Performance
SELECT C1 FROM IM_IDX_TST
WHERE C1 BETWEEN 80000 and 98000;
GO
> 17833 rows
Oracle In-Memory with Query: Elapsed time: 2.3 seconds
© 2017 Delphix. All Rights Reserved. Private and Confidential.
And the Winner?
© 2017 Delphix. All Rights Reserved. Private and Confidential.
• Data is physically sorted in clustered
index by default.
• Optimizer usage specific- clustered
index seek
• Works best with sequential data, identity
columns and order dates.
• Option to randomize the writes on the
index can deter from hot spots.
Clustered
Index in SQL
Server
© 2017 Delphix. All Rights Reserved. Private and Confidential.
SQL Server Negatives
Heavily vulnerable
to fragmentation
over standard
Oracle indexing.
Last Page Insert
Latch Contention-
not an issue in
Oracle.
Subject to
hotspots, (as
discussed.)
Page Splits- hit
performance
HARD, especially
tran log.
Fillfactor is hit or
miss config in
some systems.
© 2017 Delphix. All Rights Reserved. Private and Confidential.
Summary- Clustered Index
Clustered
Index:
Less overhead during transactional processing
for inserts, updates and deletes
Improved performance on queries of data to be
sorted in sequential order.
Similar performance for complex queries and
less sort temp usage.
Clustered Indexes are common place, IOTs
have limited use case.
© 2017 Delphix. All Rights Reserved. Private and Confidential.
Summary:
IOT
Will require more maintenance if the IOT
experiences high processing including
inserts, updates and deletes.
DBCC rebuilds of a clustered index uses
less resources and doesn’t impact the
transaction log as it does Oracle’s rollback
and archive log.
It was easier to build the table with a high
pct free storage configuration and then do
an insert of the data, then drop the old
table than to do an “alter move” command.
© 2017 Delphix. All Rights Reserved. Private and Confidential.
• Oracle
–Requires more memory
–Can adjust for hybrid environments
–Can take advantage of scalability,
such as RAC
–As with many Oracle features,
there is a heavy tax on sorting and
hashing to temp tablespace past
standard allocation in memory.
Columnar Index
• SQL Server
–Requires more knowledge and
manual work from DBA
–More maintenance
–Focused on OLAP improvements
–Impacted by latency from logging
on inserts, updates and deletes.
© 2017 Delphix. All Rights Reserved. Private and Confidential.© 2017 Delphix. All Rights Reserved. Private and Confidential.
Kellyn Pot’Vin-Gorman
Technical Intelligence Manager
kellyn@delphix.com
http://dbakevlar.com

Mais conteúdo relacionado

Mais procurados

PASS 24HOP Linux Scripting Tips and Tricks
PASS 24HOP Linux Scripting Tips and TricksPASS 24HOP Linux Scripting Tips and Tricks
PASS 24HOP Linux Scripting Tips and TricksKellyn Pot'Vin-Gorman
 
Dockerizing Oracle Database
Dockerizing Oracle Database Dockerizing Oracle Database
Dockerizing Oracle Database gvenzl
 
Containers and microservices for realists
Containers and microservices for realistsContainers and microservices for realists
Containers and microservices for realistsKarthik Gaekwad
 
Melbourne Chef Meetup: Automating Azure Compliance with InSpec
Melbourne Chef Meetup: Automating Azure Compliance with InSpecMelbourne Chef Meetup: Automating Azure Compliance with InSpec
Melbourne Chef Meetup: Automating Azure Compliance with InSpecMatt Ray
 
Hadoop on Docker
Hadoop on DockerHadoop on Docker
Hadoop on DockerRakesh Saha
 
There's More to Docker than the Container: The Docker Platform - Kendrick Col...
There's More to Docker than the Container: The Docker Platform - Kendrick Col...There's More to Docker than the Container: The Docker Platform - Kendrick Col...
There's More to Docker than the Container: The Docker Platform - Kendrick Col...{code} by Dell EMC
 
Managing Complexity at Velocity
Managing Complexity at VelocityManaging Complexity at Velocity
Managing Complexity at VelocityMatt Ray
 
Structor - Automated Building of Virtual Hadoop Clusters
Structor - Automated Building of Virtual Hadoop ClustersStructor - Automated Building of Virtual Hadoop Clusters
Structor - Automated Building of Virtual Hadoop ClustersOwen O'Malley
 
Handling Kernel Upgrades at Scale - The Dirty Cow Story
Handling Kernel Upgrades at Scale - The Dirty Cow StoryHandling Kernel Upgrades at Scale - The Dirty Cow Story
Handling Kernel Upgrades at Scale - The Dirty Cow StoryDataWorks Summit
 
Managing enterprise users in Hadoop ecosystem
Managing enterprise users in Hadoop ecosystemManaging enterprise users in Hadoop ecosystem
Managing enterprise users in Hadoop ecosystemDataWorks Summit
 
Take your database source code and data under control
Take your database source code and data under controlTake your database source code and data under control
Take your database source code and data under controlMarcin Przepiórowski
 
The Analytic Platform behind IBM’s Watson Data Platform - Big Data Spain 2017
The Analytic Platform behind IBM’s Watson Data Platform - Big Data Spain 2017The Analytic Platform behind IBM’s Watson Data Platform - Big Data Spain 2017
The Analytic Platform behind IBM’s Watson Data Platform - Big Data Spain 2017Luciano Resende
 
Scaling Hadoop at LinkedIn
Scaling Hadoop at LinkedInScaling Hadoop at LinkedIn
Scaling Hadoop at LinkedInDataWorks Summit
 
GCP - Continuous Integration and Delivery into Kubernetes with GitHub, Travis...
GCP - Continuous Integration and Delivery into Kubernetes with GitHub, Travis...GCP - Continuous Integration and Delivery into Kubernetes with GitHub, Travis...
GCP - Continuous Integration and Delivery into Kubernetes with GitHub, Travis...Oleg Shalygin
 
RedisConf18 - Open Source Built for Scale: Redis in Amazon ElastiCache Service
RedisConf18 - Open Source Built for Scale: Redis in Amazon ElastiCache ServiceRedisConf18 - Open Source Built for Scale: Redis in Amazon ElastiCache Service
RedisConf18 - Open Source Built for Scale: Redis in Amazon ElastiCache ServiceRedis Labs
 
Running Zeppelin in Enterprise
Running Zeppelin in EnterpriseRunning Zeppelin in Enterprise
Running Zeppelin in EnterpriseDataWorks Summit
 
Mesosphere and the Enterprise: Run Your Applications on Apache Mesos - Steve ...
Mesosphere and the Enterprise: Run Your Applications on Apache Mesos - Steve ...Mesosphere and the Enterprise: Run Your Applications on Apache Mesos - Steve ...
Mesosphere and the Enterprise: Run Your Applications on Apache Mesos - Steve ...{code} by Dell EMC
 
Hadoop & devOps : better together
Hadoop & devOps : better togetherHadoop & devOps : better together
Hadoop & devOps : better togetherMaxime Lanciaux
 

Mais procurados (20)

PASS 24HOP Linux Scripting Tips and Tricks
PASS 24HOP Linux Scripting Tips and TricksPASS 24HOP Linux Scripting Tips and Tricks
PASS 24HOP Linux Scripting Tips and Tricks
 
Dockerizing Oracle Database
Dockerizing Oracle Database Dockerizing Oracle Database
Dockerizing Oracle Database
 
Virtualization and Containers
Virtualization and ContainersVirtualization and Containers
Virtualization and Containers
 
Containers and microservices for realists
Containers and microservices for realistsContainers and microservices for realists
Containers and microservices for realists
 
Melbourne Chef Meetup: Automating Azure Compliance with InSpec
Melbourne Chef Meetup: Automating Azure Compliance with InSpecMelbourne Chef Meetup: Automating Azure Compliance with InSpec
Melbourne Chef Meetup: Automating Azure Compliance with InSpec
 
Hadoop on Docker
Hadoop on DockerHadoop on Docker
Hadoop on Docker
 
There's More to Docker than the Container: The Docker Platform - Kendrick Col...
There's More to Docker than the Container: The Docker Platform - Kendrick Col...There's More to Docker than the Container: The Docker Platform - Kendrick Col...
There's More to Docker than the Container: The Docker Platform - Kendrick Col...
 
Managing Complexity at Velocity
Managing Complexity at VelocityManaging Complexity at Velocity
Managing Complexity at Velocity
 
Structor - Automated Building of Virtual Hadoop Clusters
Structor - Automated Building of Virtual Hadoop ClustersStructor - Automated Building of Virtual Hadoop Clusters
Structor - Automated Building of Virtual Hadoop Clusters
 
Handling Kernel Upgrades at Scale - The Dirty Cow Story
Handling Kernel Upgrades at Scale - The Dirty Cow StoryHandling Kernel Upgrades at Scale - The Dirty Cow Story
Handling Kernel Upgrades at Scale - The Dirty Cow Story
 
DevOps and DBA- Delphix
DevOps and DBA-  DelphixDevOps and DBA-  Delphix
DevOps and DBA- Delphix
 
Managing enterprise users in Hadoop ecosystem
Managing enterprise users in Hadoop ecosystemManaging enterprise users in Hadoop ecosystem
Managing enterprise users in Hadoop ecosystem
 
Take your database source code and data under control
Take your database source code and data under controlTake your database source code and data under control
Take your database source code and data under control
 
The Analytic Platform behind IBM’s Watson Data Platform - Big Data Spain 2017
The Analytic Platform behind IBM’s Watson Data Platform - Big Data Spain 2017The Analytic Platform behind IBM’s Watson Data Platform - Big Data Spain 2017
The Analytic Platform behind IBM’s Watson Data Platform - Big Data Spain 2017
 
Scaling Hadoop at LinkedIn
Scaling Hadoop at LinkedInScaling Hadoop at LinkedIn
Scaling Hadoop at LinkedIn
 
GCP - Continuous Integration and Delivery into Kubernetes with GitHub, Travis...
GCP - Continuous Integration and Delivery into Kubernetes with GitHub, Travis...GCP - Continuous Integration and Delivery into Kubernetes with GitHub, Travis...
GCP - Continuous Integration and Delivery into Kubernetes with GitHub, Travis...
 
RedisConf18 - Open Source Built for Scale: Redis in Amazon ElastiCache Service
RedisConf18 - Open Source Built for Scale: Redis in Amazon ElastiCache ServiceRedisConf18 - Open Source Built for Scale: Redis in Amazon ElastiCache Service
RedisConf18 - Open Source Built for Scale: Redis in Amazon ElastiCache Service
 
Running Zeppelin in Enterprise
Running Zeppelin in EnterpriseRunning Zeppelin in Enterprise
Running Zeppelin in Enterprise
 
Mesosphere and the Enterprise: Run Your Applications on Apache Mesos - Steve ...
Mesosphere and the Enterprise: Run Your Applications on Apache Mesos - Steve ...Mesosphere and the Enterprise: Run Your Applications on Apache Mesos - Steve ...
Mesosphere and the Enterprise: Run Your Applications on Apache Mesos - Steve ...
 
Hadoop & devOps : better together
Hadoop & devOps : better togetherHadoop & devOps : better together
Hadoop & devOps : better together
 

Semelhante a War of the Indices- SQL vs. Oracle

War of the Indices- SQL Server and Oracle
War of the Indices-  SQL Server and OracleWar of the Indices-  SQL Server and Oracle
War of the Indices- SQL Server and OracleKellyn Pot'Vin-Gorman
 
Dd and atomic ddl pl17 dublin
Dd and atomic ddl pl17 dublinDd and atomic ddl pl17 dublin
Dd and atomic ddl pl17 dublinStåle Deraas
 
Polyglot Database - Linuxcon North America 2016
Polyglot Database - Linuxcon North America 2016Polyglot Database - Linuxcon North America 2016
Polyglot Database - Linuxcon North America 2016Dave Stokes
 
JDBC Next: A New Asynchronous API for Connecting to a Database
JDBC Next: A New Asynchronous API for Connecting to a Database JDBC Next: A New Asynchronous API for Connecting to a Database
JDBC Next: A New Asynchronous API for Connecting to a Database Yolande Poirier
 
android sqlite
android sqliteandroid sqlite
android sqliteDeepa Rani
 
MySQL New Features -- Sunshine PHP 2020 Presentation
MySQL New Features -- Sunshine PHP 2020 PresentationMySQL New Features -- Sunshine PHP 2020 Presentation
MySQL New Features -- Sunshine PHP 2020 PresentationDave Stokes
 
Aioug2017 deploying-ebs-on-prem-and-on-oracle-cloud v2
Aioug2017 deploying-ebs-on-prem-and-on-oracle-cloud v2Aioug2017 deploying-ebs-on-prem-and-on-oracle-cloud v2
Aioug2017 deploying-ebs-on-prem-and-on-oracle-cloud v2pasalapudi
 
Less07 schema
Less07 schemaLess07 schema
Less07 schemaImran Ali
 
What's New in MySQL 8.0 @ HKOSC 2017
What's New in MySQL 8.0 @ HKOSC 2017What's New in MySQL 8.0 @ HKOSC 2017
What's New in MySQL 8.0 @ HKOSC 2017Ivan Ma
 
SQL PPT.pptx
SQL PPT.pptxSQL PPT.pptx
SQL PPT.pptxKulbir4
 
Introducing U-SQL (SQLPASS 2016)
Introducing U-SQL (SQLPASS 2016)Introducing U-SQL (SQLPASS 2016)
Introducing U-SQL (SQLPASS 2016)Michael Rys
 
Useful PL/SQL Supplied Packages
Useful PL/SQL Supplied PackagesUseful PL/SQL Supplied Packages
Useful PL/SQL Supplied PackagesMaria Colgan
 
Apex basics-for Beginners
Apex basics-for BeginnersApex basics-for Beginners
Apex basics-for Beginnershrakhra
 
MySQL como Document Store PHP Conference 2017
MySQL como Document Store PHP Conference 2017MySQL como Document Store PHP Conference 2017
MySQL como Document Store PHP Conference 2017MySQL Brasil
 
MySQL 8.0 in a nutshell
MySQL 8.0 in a nutshellMySQL 8.0 in a nutshell
MySQL 8.0 in a nutshellOracleMySQL
 
State ofdolphin short
State ofdolphin shortState ofdolphin short
State ofdolphin shortMandy Ang
 
Oracle to Amazon Aurora Migration, Step by Step - AWS Online Tech Talks
Oracle to Amazon Aurora Migration, Step by Step - AWS Online Tech TalksOracle to Amazon Aurora Migration, Step by Step - AWS Online Tech Talks
Oracle to Amazon Aurora Migration, Step by Step - AWS Online Tech TalksAmazon Web Services
 
Sql on everything with drill
Sql on everything with drillSql on everything with drill
Sql on everything with drillJulien Le Dem
 

Semelhante a War of the Indices- SQL vs. Oracle (20)

War of the Indices- SQL Server and Oracle
War of the Indices-  SQL Server and OracleWar of the Indices-  SQL Server and Oracle
War of the Indices- SQL Server and Oracle
 
Dd and atomic ddl pl17 dublin
Dd and atomic ddl pl17 dublinDd and atomic ddl pl17 dublin
Dd and atomic ddl pl17 dublin
 
Polyglot Database - Linuxcon North America 2016
Polyglot Database - Linuxcon North America 2016Polyglot Database - Linuxcon North America 2016
Polyglot Database - Linuxcon North America 2016
 
JDBC Next: A New Asynchronous API for Connecting to a Database
JDBC Next: A New Asynchronous API for Connecting to a Database JDBC Next: A New Asynchronous API for Connecting to a Database
JDBC Next: A New Asynchronous API for Connecting to a Database
 
android sqlite
android sqliteandroid sqlite
android sqlite
 
MySQL New Features -- Sunshine PHP 2020 Presentation
MySQL New Features -- Sunshine PHP 2020 PresentationMySQL New Features -- Sunshine PHP 2020 Presentation
MySQL New Features -- Sunshine PHP 2020 Presentation
 
Aioug2017 deploying-ebs-on-prem-and-on-oracle-cloud v2
Aioug2017 deploying-ebs-on-prem-and-on-oracle-cloud v2Aioug2017 deploying-ebs-on-prem-and-on-oracle-cloud v2
Aioug2017 deploying-ebs-on-prem-and-on-oracle-cloud v2
 
Less07 schema
Less07 schemaLess07 schema
Less07 schema
 
What's New in MySQL 8.0 @ HKOSC 2017
What's New in MySQL 8.0 @ HKOSC 2017What's New in MySQL 8.0 @ HKOSC 2017
What's New in MySQL 8.0 @ HKOSC 2017
 
SQL PPT.pptx
SQL PPT.pptxSQL PPT.pptx
SQL PPT.pptx
 
Introducing U-SQL (SQLPASS 2016)
Introducing U-SQL (SQLPASS 2016)Introducing U-SQL (SQLPASS 2016)
Introducing U-SQL (SQLPASS 2016)
 
r4
r4r4
r4
 
Useful PL/SQL Supplied Packages
Useful PL/SQL Supplied PackagesUseful PL/SQL Supplied Packages
Useful PL/SQL Supplied Packages
 
Spark sql meetup
Spark sql meetupSpark sql meetup
Spark sql meetup
 
Apex basics-for Beginners
Apex basics-for BeginnersApex basics-for Beginners
Apex basics-for Beginners
 
MySQL como Document Store PHP Conference 2017
MySQL como Document Store PHP Conference 2017MySQL como Document Store PHP Conference 2017
MySQL como Document Store PHP Conference 2017
 
MySQL 8.0 in a nutshell
MySQL 8.0 in a nutshellMySQL 8.0 in a nutshell
MySQL 8.0 in a nutshell
 
State ofdolphin short
State ofdolphin shortState ofdolphin short
State ofdolphin short
 
Oracle to Amazon Aurora Migration, Step by Step - AWS Online Tech Talks
Oracle to Amazon Aurora Migration, Step by Step - AWS Online Tech TalksOracle to Amazon Aurora Migration, Step by Step - AWS Online Tech Talks
Oracle to Amazon Aurora Migration, Step by Step - AWS Online Tech Talks
 
Sql on everything with drill
Sql on everything with drillSql on everything with drill
Sql on everything with drill
 

Mais de Kellyn Pot'Vin-Gorman

Redgate_summit_atl_kgorman_intersection.pptx
Redgate_summit_atl_kgorman_intersection.pptxRedgate_summit_atl_kgorman_intersection.pptx
Redgate_summit_atl_kgorman_intersection.pptxKellyn Pot'Vin-Gorman
 
SQLSatOregon_kgorman_keynote_NIAIMLEC.pptx
SQLSatOregon_kgorman_keynote_NIAIMLEC.pptxSQLSatOregon_kgorman_keynote_NIAIMLEC.pptx
SQLSatOregon_kgorman_keynote_NIAIMLEC.pptxKellyn Pot'Vin-Gorman
 
Turning ADHD into "Awesome Dynamic Highly Dependable"
Turning ADHD into "Awesome Dynamic Highly Dependable"Turning ADHD into "Awesome Dynamic Highly Dependable"
Turning ADHD into "Awesome Dynamic Highly Dependable"Kellyn Pot'Vin-Gorman
 
Cepta The Future of Data with Power BI
Cepta The Future of Data with Power BICepta The Future of Data with Power BI
Cepta The Future of Data with Power BIKellyn Pot'Vin-Gorman
 
Pass Summit Linux Scripting for the Microsoft Professional
Pass Summit Linux Scripting for the Microsoft ProfessionalPass Summit Linux Scripting for the Microsoft Professional
Pass Summit Linux Scripting for the Microsoft ProfessionalKellyn Pot'Vin-Gorman
 
Power BI with Essbase in the Oracle Cloud
Power BI with Essbase in the Oracle CloudPower BI with Essbase in the Oracle Cloud
Power BI with Essbase in the Oracle CloudKellyn Pot'Vin-Gorman
 
ODTUG Leadership Talk- WIT and Sponsorship
ODTUG Leadership Talk-  WIT and SponsorshipODTUG Leadership Talk-  WIT and Sponsorship
ODTUG Leadership Talk- WIT and SponsorshipKellyn Pot'Vin-Gorman
 
Taming the shrew, Optimizing Power BI Options
Taming the shrew, Optimizing Power BI OptionsTaming the shrew, Optimizing Power BI Options
Taming the shrew, Optimizing Power BI OptionsKellyn Pot'Vin-Gorman
 

Mais de Kellyn Pot'Vin-Gorman (20)

Redgate_summit_atl_kgorman_intersection.pptx
Redgate_summit_atl_kgorman_intersection.pptxRedgate_summit_atl_kgorman_intersection.pptx
Redgate_summit_atl_kgorman_intersection.pptx
 
SQLSatOregon_kgorman_keynote_NIAIMLEC.pptx
SQLSatOregon_kgorman_keynote_NIAIMLEC.pptxSQLSatOregon_kgorman_keynote_NIAIMLEC.pptx
SQLSatOregon_kgorman_keynote_NIAIMLEC.pptx
 
Boston_sql_kegorman_highIO.pptx
Boston_sql_kegorman_highIO.pptxBoston_sql_kegorman_highIO.pptx
Boston_sql_kegorman_highIO.pptx
 
Oracle on Azure IaaS 2023 Update
Oracle on Azure IaaS 2023 UpdateOracle on Azure IaaS 2023 Update
Oracle on Azure IaaS 2023 Update
 
IaaS for DBAs in Azure
IaaS for DBAs in AzureIaaS for DBAs in Azure
IaaS for DBAs in Azure
 
Being Successful with ADHD
Being Successful with ADHDBeing Successful with ADHD
Being Successful with ADHD
 
Azure DBA with IaaS
Azure DBA with IaaSAzure DBA with IaaS
Azure DBA with IaaS
 
Turning ADHD into "Awesome Dynamic Highly Dependable"
Turning ADHD into "Awesome Dynamic Highly Dependable"Turning ADHD into "Awesome Dynamic Highly Dependable"
Turning ADHD into "Awesome Dynamic Highly Dependable"
 
PASS Summit 2020
PASS Summit 2020PASS Summit 2020
PASS Summit 2020
 
DevOps in Silos
DevOps in SilosDevOps in Silos
DevOps in Silos
 
Azure Databases with IaaS
Azure Databases with IaaSAzure Databases with IaaS
Azure Databases with IaaS
 
How to Win When Migrating to Azure
How to Win When Migrating to AzureHow to Win When Migrating to Azure
How to Win When Migrating to Azure
 
Securing Power BI Data
Securing Power BI DataSecuring Power BI Data
Securing Power BI Data
 
Cepta The Future of Data with Power BI
Cepta The Future of Data with Power BICepta The Future of Data with Power BI
Cepta The Future of Data with Power BI
 
Pass Summit Linux Scripting for the Microsoft Professional
Pass Summit Linux Scripting for the Microsoft ProfessionalPass Summit Linux Scripting for the Microsoft Professional
Pass Summit Linux Scripting for the Microsoft Professional
 
Taming the shrew Power BI
Taming the shrew Power BITaming the shrew Power BI
Taming the shrew Power BI
 
Power BI with Essbase in the Oracle Cloud
Power BI with Essbase in the Oracle CloudPower BI with Essbase in the Oracle Cloud
Power BI with Essbase in the Oracle Cloud
 
ODTUG Leadership Talk- WIT and Sponsorship
ODTUG Leadership Talk-  WIT and SponsorshipODTUG Leadership Talk-  WIT and Sponsorship
ODTUG Leadership Talk- WIT and Sponsorship
 
GDPR- The Buck Stops Here
GDPR-  The Buck Stops HereGDPR-  The Buck Stops Here
GDPR- The Buck Stops Here
 
Taming the shrew, Optimizing Power BI Options
Taming the shrew, Optimizing Power BI OptionsTaming the shrew, Optimizing Power BI Options
Taming the shrew, Optimizing Power BI Options
 

Último

Azure Monitor & Application Insight to monitor Infrastructure & Application
Azure Monitor & Application Insight to monitor Infrastructure & ApplicationAzure Monitor & Application Insight to monitor Infrastructure & Application
Azure Monitor & Application Insight to monitor Infrastructure & ApplicationAndikSusilo4
 
Salesforce Community Group Quito, Salesforce 101
Salesforce Community Group Quito, Salesforce 101Salesforce Community Group Quito, Salesforce 101
Salesforce Community Group Quito, Salesforce 101Paola De la Torre
 
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking MenDelhi Call girls
 
The Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxThe Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxMalak Abu Hammad
 
Maximizing Board Effectiveness 2024 Webinar.pptx
Maximizing Board Effectiveness 2024 Webinar.pptxMaximizing Board Effectiveness 2024 Webinar.pptx
Maximizing Board Effectiveness 2024 Webinar.pptxOnBoard
 
Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024BookNet Canada
 
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024Rafal Los
 
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...HostedbyConfluent
 
[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdfhans926745
 
Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)Allon Mureinik
 
08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking MenDelhi Call girls
 
Key Features Of Token Development (1).pptx
Key  Features Of Token  Development (1).pptxKey  Features Of Token  Development (1).pptx
Key Features Of Token Development (1).pptxLBM Solutions
 
How to convert PDF to text with Nanonets
How to convert PDF to text with NanonetsHow to convert PDF to text with Nanonets
How to convert PDF to text with Nanonetsnaman860154
 
Human Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsHuman Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsMark Billinghurst
 
AI as an Interface for Commercial Buildings
AI as an Interface for Commercial BuildingsAI as an Interface for Commercial Buildings
AI as an Interface for Commercial BuildingsMemoori
 
Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsHandwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsMaria Levchenko
 
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 3652toLead Limited
 
Enhancing Worker Digital Experience: A Hands-on Workshop for Partners
Enhancing Worker Digital Experience: A Hands-on Workshop for PartnersEnhancing Worker Digital Experience: A Hands-on Workshop for Partners
Enhancing Worker Digital Experience: A Hands-on Workshop for PartnersThousandEyes
 
Unblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen FramesUnblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen FramesSinan KOZAK
 
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure serviceWhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure servicePooja Nehwal
 

Último (20)

Azure Monitor & Application Insight to monitor Infrastructure & Application
Azure Monitor & Application Insight to monitor Infrastructure & ApplicationAzure Monitor & Application Insight to monitor Infrastructure & Application
Azure Monitor & Application Insight to monitor Infrastructure & Application
 
Salesforce Community Group Quito, Salesforce 101
Salesforce Community Group Quito, Salesforce 101Salesforce Community Group Quito, Salesforce 101
Salesforce Community Group Quito, Salesforce 101
 
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
 
The Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxThe Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptx
 
Maximizing Board Effectiveness 2024 Webinar.pptx
Maximizing Board Effectiveness 2024 Webinar.pptxMaximizing Board Effectiveness 2024 Webinar.pptx
Maximizing Board Effectiveness 2024 Webinar.pptx
 
Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
 
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024
 
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...
 
[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf
 
Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)
 
08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men
 
Key Features Of Token Development (1).pptx
Key  Features Of Token  Development (1).pptxKey  Features Of Token  Development (1).pptx
Key Features Of Token Development (1).pptx
 
How to convert PDF to text with Nanonets
How to convert PDF to text with NanonetsHow to convert PDF to text with Nanonets
How to convert PDF to text with Nanonets
 
Human Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsHuman Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR Systems
 
AI as an Interface for Commercial Buildings
AI as an Interface for Commercial BuildingsAI as an Interface for Commercial Buildings
AI as an Interface for Commercial Buildings
 
Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsHandwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed texts
 
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
 
Enhancing Worker Digital Experience: A Hands-on Workshop for Partners
Enhancing Worker Digital Experience: A Hands-on Workshop for PartnersEnhancing Worker Digital Experience: A Hands-on Workshop for Partners
Enhancing Worker Digital Experience: A Hands-on Workshop for Partners
 
Unblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen FramesUnblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen Frames
 
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure serviceWhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
 

War of the Indices- SQL vs. Oracle

  • 1. © 2017 Delphix. All Rights Reserved. Private and Confidential.© 2017 Delphix. All Rights Reserved. Private and Confidential. Kellyn Pot’Vin-Gorman | Technical Intelligence Manager| January, 2018 War of the Indices SQL Server vs. Oracle
  • 2. © 2017 Delphix. All Rights Reserved. Private and Confidential. Kellyn Pot’Vin-Gorman Technical Intelligence Manager, Delphix • Multi-platform DBA, (Oracle, MSSQL, MySQL, Sybase, PostgreSQL, Informix…) • Oracle ACE Director, (Alumni) • Oak Table Network Member • Idera ACE 2018 • APEX Women in Technology Award, CTA • STEM education with Raspberry Pi and Python, including DevOxx4Kids, Oracle Education Foundation and TechGirls • President, Rocky Mtn Oracle User Group • President, Denver SQL Server User Group • DevOps author, instructor and presenter. • Author, blogger, (http://dbakevlar.com)
  • 3. © 2017 Delphix. All Rights Reserved. Private and Confidential. 3 Agenda Background1 Platform Translations2 Test Case and Goal3 Code and Discussion4 Analysis and Summary5
  • 4. © 2017 Delphix. All Rights Reserved. Private and Confidential. Azure SQL Database AWS with Oracle 11.2.0.4 The What- Version 1
  • 5. © 2017 Delphix. All Rights Reserved. Private and Confidential. The What- Version 2
  • 6. © 2017 Delphix. All Rights Reserved. Private and Confidential. • Its interesting…to me, at least. • VM was an issue, so moved everything to the cloud and also worked with Docker. • Two major players in the database landscape. • Good apples to “apfel” comparison. The Why
  • 7. © 2017 Delphix. All Rights Reserved. Private and Confidential. Indexing • An Index, like an index in a book references data. SQL Server Indexes • Clustered Index contains data, one per table • Non-clustered is just pointers and a table can have up to 999, (version dependent) • No Clustered index results in table referred to as a heap table. • Clustered index is sorted upon original build Oracle • All indexes are by default heap • Index OrganizedTable, (IOT) is closest to a SQL Server Index • Multiple complex objects to compare to SQL Server • ROWID is a game changer
  • 8. © 2017 Delphix. All Rights Reserved. Private and Confidential. Similar at High Level OracleVs. SQL Server Index = Clustered Index
  • 9. © 2017 Delphix. All Rights Reserved. Private and Confidential. Translations Graph Query Insert
  • 10. © 2017 Delphix. All Rights Reserved. Private and Confidential. Different Architecture
  • 11. © 2017 Delphix. All Rights Reserved. Private and Confidential. FILLFACTOR is a setting for indexes in SQL Server. When you create or rebuild an index, you can tell SQL Server what percentage of each 8K data page used in the “leaf” level of the index it should fill up. Default is 80 percent, but for non-OLTP, often recommended to be 100. Fill Factor in SQL Server
  • 12. © 2017 Delphix. All Rights Reserved. Private and Confidential. PCT Free in Oracle PCTFREE is a block storage parameter used to specify how much space should be left in a database block for future updates. For example, for PCTFREE=10, Oracle will keep on adding new rows to a block until it is 90% full. This leaves 10% for future updates (row expansion). This defaults to 10% for indexes, but can be adjusted via a index rebuild.
  • 13. © 2017 Delphix. All Rights Reserved. Private and Confidential. SQL Server Index Writes- Not Subject to Page Splits
  • 14. © 2017 Delphix. All Rights Reserved. Private and Confidential. SQL Server Index Processing Impacted by Random
  • 15. © 2017 Delphix. All Rights Reserved. Private and Confidential. In What Case Would You Rebuild? • Significant # of logically deleted index nodes. • Inefficient number of gets per access So yes, there are times and situations you need to rebuild. The goal here is to see where each platform performs better than the other. Fragmentation Doesn’t Exist in Oracle Indexes?
  • 16. © 2017 Delphix. All Rights Reserved. Private and Confidential. Test Case • Create a table with three columns and two indexes. • Insert, update and delete different amounts of data. • check the storage of our index and any fragmentation, storage anomalies. • Repeat • Check the storage repeatedly to see how it has changed- page splits in SQL Server, leaf block splits in Oracle
  • 17. © 2017 Delphix. All Rights Reserved. Private and Confidential. Goal 1. Inspect the differences and similarities of indexing in both platforms 2. The pros and cons of how index data is stored and used in the database platforms. • http://dbakevlar.com/2017/04/oracle-sql-server-index-comparison/
  • 18. © 2017 Delphix. All Rights Reserved. Private and Confidential. First Test, Build and Check
  • 19. © 2017 Delphix. All Rights Reserved. Private and Confidential. Oracle Objects CREATE TABLE ORA_INDEX_TST ( C1 NUMBER NOT NULL ,C2 VARCHAR2(255) ,CREATEDATE TIMESTAMP DEFAULT CURRENT_TIMESTAMP) ;CREATE INDEX PK_INDEXPS ON ORA_INDEX_TST (C1); CREATE INDEX IDX_INDEXPS ON ORA_INDEX_TST (C2); ALTER TABLE ORA_INDEX_TST ADD CONSTRAINT OIT_PK PRIMARY KEY(C1) USING INDEX PK_INDEXPS; ALTER INDEX IDX_INDEXPS REBUILD PCTFREE 20 INITRANS 5; ALTER INDEX PK_INDEXPS REBUILD PCTFREE 20 INITRANS 5;
  • 20. © 2017 Delphix. All Rights Reserved. Private and Confidential. Oracle Support Objects CREATE SEQUENCE C1_SEQ START WITH 1; CREATE OR REPLACE TRIGGER C1_BIR BEFORE INSERT ON ORA_INDEX_TST FOR EACH ROW BEGIN SELECT C1_SEQ.NEXTVAL INTO :new.C1 FROM DUAL; END; /
  • 21. © 2017 Delphix. All Rights Reserved. Private and Confidential. Insert 7 Rows to Fill One Oracle Block INSERT INTO ORA_INDEX_TST (C2, CREATEDATE) VALUES (dbms_random.string('A', 200), SYSDATE); INSERT INTO ORA_INDEX_TST (C2, CREATEDATE) …… …… INSERT INTO ORA_INDEX_TST (C2, CREATEDATE) VALUES (dbms_random.string('F', 200), SYSDATE); INSERT INTO ORA_INDEX_TST (C2, CREATEDATE) VALUES (dbms_random.string('G', 200), SYSDATE); COMMIT;
  • 22. © 2017 Delphix. All Rights Reserved. Private and Confidential. Check the Block SQL> ANALYZE INDEX PK_INDEXPS VALIDATE STRUCTURE; SQL> SELECT LF_BLKS, LF_BLK_LEN, DEL_LF_ROWS,USED_SPACE, PCT_USED FROM INDEX_STATS where NAME='PK_INDEXPS'; LF_BLKS LF_BLK_LEN DEL_LF_ROWS USED_SPACE PCT_USED ---------- ---------- ----------- ---------- -------- 1 7924 0 1491 19 As expected- 1 leaf block for the seven rows.
  • 23. © 2017 Delphix. All Rights Reserved. Private and Confidential. Adjust Index and Then Insert 8th Row ALTER INDEX IDX_INDEXPS REBUILD PCTFREE 90 INITRANS 5; • Yes, we’ve just adjusted the pctfree to 90%! • Consider what this will do to our index storage now that we’ve rebuilt this allowing for only 10% usage in each block. • Insert the 8th row: INSERT INTO ORA_INDEX_TST (C2, CREATEDATE) VALUES (dbms_random.string(‘H', 200), SYSDATE);
  • 24. © 2017 Delphix. All Rights Reserved. Private and Confidential. After Change to Pct Free SQL> ANALYZE INDEX PK_INDEXPS VALIDATE STRUCTURE; SQL> SELECT LF_BLKS, LF_BLK_LEN, DEL_LF_ROWS,USED_SPACE, PCT_USED FROM INDEX_STATS where NAME='PK_INDEXPS'; LF_BLKS LF_BLK_LEN DEL_LF_ROWS USED_SPACE PCT_USED ---------- ---------- ----------- ---------- 8 8229 0 2369 12 Query Time Increase: 2.1 Times Slower
  • 25. © 2017 Delphix. All Rights Reserved. Private and Confidential. SQL Server’s Turn
  • 26. © 2017 Delphix. All Rights Reserved. Private and Confidential. SQL Server Objects CREATE TABLE SQL_INDEX_TST (c1 INT NOT NULL, c2 CHAR (255), createdate DATETIME NOT NULL DEFAULT GETDATE()); CREATE INDEX CL2_INDEX_TST ON SQL_INDEX_TST(C2); GO ALTER TABLE SQL_INDEX_TST ADD CONSTRAINT PK_CLINDX_TST PRIMARY KEY CLUSTERED (c1);
  • 27. © 2017 Delphix. All Rights Reserved. Private and Confidential. Insert 7 Rows to Fill up Initial SQL Server Page INSERT INTO SQL_INDEX_TST(c1,c2) VALUES (1, 'a'); INSERT INTO SQL_INDEX_TST(c1,c2) VALUES (2, 'a'); INSERT INTO SQL_INDEX_TST(c1,c2) VALUES (3, 'a'); INSERT INTO SQL_INDEX_TST(c1,c2) VALUES (4, 'a'); INSERT INTO SQL_INDEX_TST(c1,c2) VALUES (6, 'a'); INSERT INTO SQL_INDEX_TST(c1,c2) VALUES (7, 'a'); GO
  • 28. © 2017 Delphix. All Rights Reserved. Private and Confidential. Check Statistics and Page Data on Index SELECT OBJECT_SCHEMA_NAME(ios.object_id) + '.' + OBJECT_NAME(ios.object_id) as table_name, i.name as index_name, leaf_allocation_count, nonleaf_allocation_count FROM sys.dm_db_index_operational_stats(DB_ID(), OBJECT_ID('dbo.SQL_INDEX_TST'),NULL, NULL) ios INNER JOIN sys.indexes i ON i.object_id = ios.object_id AND i.index_id = ios.index_id;
  • 29. © 2017 Delphix. All Rights Reserved. Private and Confidential. Results
  • 30. © 2017 Delphix. All Rights Reserved. Private and Confidential. Alter Index Fillfactor and Insert 8th Row ALTER INDEX CL_INDEX_TST ON dbo.SQL_Index_tst REBUILD WITH (FILLFACTOR = 10); GO Now insert the 8th row in: INSERT INTO SQL_INDEX_TST(c1,c2) VALUES (8, 'a'); GO
  • 31. © 2017 Delphix. All Rights Reserved. Private and Confidential. Results LeafAllocationCount: 8 Fill Factor: 10 QueryTime Increase: 2.3Times SLOWER
  • 32. © 2017 Delphix. All Rights Reserved. Private and Confidential. Second Test, Build and Check
  • 33. © 2017 Delphix. All Rights Reserved. Private and Confidential. Data Loads into Oracle SQL> Begin For IDS in 1..1000000 Loop INSERT INTO ORA_INDEX_TST (C2, CREATEDATE) VALUES (dbms_random.string('X', 200), SYSDATE); Commit; End loop; End; /
  • 34. © 2017 Delphix. All Rights Reserved. Private and Confidential. Check Data and Delete Data SQL> select count(*) from ora_index_tst; COUNT(*) ---------- 1000008 SQL> delete from ora_index_tst where c2 like '%200%'; 437 rows deleted. SQL> commit; Commit complete. 10% PCT Free- Time Elapsed 2 minutes, 12 seconds 90% PCT Free- Time Elapsed 7 minutes, 3 seconds
  • 35. © 2017 Delphix. All Rights Reserved. Private and Confidential. Resulting Index Fragmentation and Storage SELECT LF_BLKS, LF_BLK_LEN, DEL_LF_ROWS,USED_SPACE, PCT_USED FROM INDEX_STATS;
  • 36. © 2017 Delphix. All Rights Reserved. Private and Confidential. Ending Row Count
  • 37. © 2017 Delphix. All Rights Reserved. Private and Confidential. Check Index
  • 38. © 2017 Delphix. All Rights Reserved. Private and Confidential. SQL Server’s Turn
  • 39. © 2017 Delphix. All Rights Reserved. Private and Confidential. SQL Server Insert declare @id int select @id = 9 --already inserted 8 rows while @id >= 0 and @id <= 1000000 begin insert into sql_index_tst (c1,c2) values(@id, 'DKUELKJ' + convert(varchar(7), @id)) select @id = @id + 1 end Default Fill Factor- Elapsed Time: 4 minutes, 43 seconds 10% Fill Factor- Elapsed time: 23 minutes, 18 seconds
  • 40. © 2017 Delphix. All Rights Reserved. Private and Confidential. Check Page Splits in SQL Server SELECT OBJECT_SCHEMA_NAME(ios.object_id) + '.' + OBJECT_NAME(ios.object_id) as table_name ,i.name as index_name ,leaf_allocation_count ,nonleaf_allocation_count FROM sys.dm_db_index_operational_stats(DB_ID(), OBJECT_ID('dbo.SQL_Index_tst'),NULL, NULL) ios INNER JOIN sys.indexes i ON i.object_id = ios.object_id AND i.index_id = ios.index_id;
  • 41. © 2017 Delphix. All Rights Reserved. Private and Confidential. Page Splits Observed
  • 42. © 2017 Delphix. All Rights Reserved. Private and Confidential. Check Fragmentation in SQL Server SELECT OBJECT_SCHEMA_NAME(ips.object_id) + '.' + OBJECT_NAME(ips.object_id) as table_name ,ips.avg_fragmentation_in_percent ,ips.fragment_count ,page_count FROM sys.dm_db_index_physical_stats(DB_ID(), OBJECT_ID('dbo.SQL_Index_tst'
  • 43. © 2017 Delphix. All Rights Reserved. Private and Confidential. Fragmentation Results
  • 44. © 2017 Delphix. All Rights Reserved. Private and Confidential. Third Test, Build and Check
  • 45. © 2017 Delphix. All Rights Reserved. Private and Confidential. • Oracle Index Organized Tables are most similar to SQL Server Clustered Indexes. • How do those compare? Clustered Indexes vs. Oracle IOTs
  • 46. © 2017 Delphix. All Rights Reserved. Private and Confidential. • Variation of a primary b- tree index • The index IS the table • Data is sorted Index Organized Table, (IOT)
  • 47. © 2017 Delphix. All Rights Reserved. Private and Confidential. Oracle IOT Syntax CREATE TABLE ora_tst_iot( c1 NUMBER, c2 varchar2(255), CREATEDATE timestamp DEFAULT CURRENT_TIMESTAMP, CONSTRAINT pk_ora_iot PRIMARY KEY (c1)) ORGANIZATION INDEX TABLESPACE users PCTFREE 20 OVERFLOW TABLESPACE users;
  • 48. © 2017 Delphix. All Rights Reserved. Private and Confidential. • Created Sequence for PK on C1 column • Created Trigger to insert next value in C1 on insert. • The % Threshold set to 20 • No compression • Loaded from my original table ORA_INDEX_TST Supporting Features
  • 49. © 2017 Delphix. All Rights Reserved. Private and Confidential. Data Load and Validation
  • 50. © 2017 Delphix. All Rights Reserved. Private and Confidential. Remove Data-
  • 51. © 2017 Delphix. All Rights Reserved. Private and Confidential. IOT Vulnerabilities SQL> SELECT 'Chained or Migrated Rows = '||value FROM v$sysstat WHERE name = 'table fetch continued row'; Chained or Migrated Rows = 73730
  • 52. © 2017 Delphix. All Rights Reserved. Private and Confidential. Findings C2 column has significant data and without C1, has a difficult time for access. Disable trigger for sequence and then load table with simplified data, then rebuild. ALTER TABLE ORA_IOT_TST REBUILD;
  • 53. © 2017 Delphix. All Rights Reserved. Private and Confidential. After Issuing a Move Statement on an IOT Tablespace Extent Block Row After Move Command
  • 54. © 2017 Delphix. All Rights Reserved. Private and Confidential.
  • 55. © 2017 Delphix. All Rights Reserved. Private and Confidential. • As discussed, Pct Free is how much free is to be left at the end of a block…90%...hmm… So PCT Free
  • 56. © 2017 Delphix. All Rights Reserved. Private and Confidential. • 10% Fill Factor in SQL Server and 1 million insert: Elapsed time: 23 minutes, 18 seconds • 90% PCTFree in Oracle and 1 million insert: 7 min, 12 seconds • 100% Fill Factor in SQL Server and 1 million insert: Elapsed Time: 4 minutes, 43 seconds • 0% PCTFree in Oracle and 1 million insert: 1 min, 8 seconds • REBUILD of the Oracle IOT to make it 90% free in each block? Elapsed Time: 8 hrs, 21 minutes, 12 seconds Comparisons- Pct Free Vs. Fill Factor
  • 57. © 2017 Delphix. All Rights Reserved. Private and Confidential. Column Store Indexes
  • 58. © 2017 Delphix. All Rights Reserved. Private and Confidential. Columnstore Indexes
  • 59. © 2017 Delphix. All Rights Reserved. Private and Confidential. Create Our Columnstore Index CREATE CLUSTERED COLUMNSTORE index SQLIDX_TST_CI on SQL_INDEX_TST WITH (DROP_EXISTING = ON); Check Viable: SELECT * FROM sys.tables WHERE is_memory_optimized=1; SELECT * FROM sys.table_types WHERE is_memory_optimized=1 SELECT * FROM sys.sql_modules WHERE uses_native_compilation=1; GO
  • 60. © 2017 Delphix. All Rights Reserved. Private and Confidential. Test Query Performance SQL Server with Query: Elapsed time: 2.6 seconds SELECT C1 FROM SQL_INDEX_TST WHERE C1 BETWEEN 80000 and 98000; GO > 17421 rows
  • 61. © 2017 Delphix. All Rights Reserved. Private and Confidential. How Oracle Architecture is Different Simpler to turn on than SQL Server’s 1 Columnar indexes are built dynamically in-memory 2
  • 62. © 2017 Delphix. All Rights Reserved. Private and Confidential. Turn on Oracle In-Memory ALTER SYSTEM SET INMEMORY_SIZE=2G SCOPE=SPFILE; (Restart) SQL> SHOW PARAMETER INMEMORY NAME TYPE VALUE ------------------------------------ ----------- ----- ------------------------- inmemory_clause_default string inmemory_force string DEFAULT inmemory_max_populate_servers integer 1 inmemory_query string ENABLE inmemory_size big integer 2G I nmemory_trickle_repopulate_servers_ integer 1 percent optimizer_inmemory_aware boolean TRUE
  • 63. © 2017 Delphix. All Rights Reserved. Private and Confidential. Create Table for In-Memory CREATE TABLE IM_IDX_TST as select * from ORA_INDEX_TST INMEMORY MEMCOMPRESS FOR QUERY HIGH(c1); SELECT table_name, inmemory, inmemory_priority, inmemory_distribute, inmemory_compression FROM user_tables WHERE TABLE_NAME in (‘ORA_INDEX_TST’,’IM_IDX_TST’); TABLE_NAME INMEMORY INMEMORY INMEMORY_DISTRI INMEMORY_COMPRESS ------------------- -------- -------- --------------- --------------- ORA_INDEX_TST DISABLED IM_IDX_TST ENABLED NONE AUTO FOR QUERY LOW NO
  • 64. © 2017 Delphix. All Rights Reserved. Private and Confidential. Test Query Performance SELECT C1 FROM IM_IDX_TST WHERE C1 BETWEEN 80000 and 98000; GO > 17833 rows Oracle In-Memory with Query: Elapsed time: 2.3 seconds
  • 65. © 2017 Delphix. All Rights Reserved. Private and Confidential. And the Winner?
  • 66. © 2017 Delphix. All Rights Reserved. Private and Confidential. • Data is physically sorted in clustered index by default. • Optimizer usage specific- clustered index seek • Works best with sequential data, identity columns and order dates. • Option to randomize the writes on the index can deter from hot spots. Clustered Index in SQL Server
  • 67. © 2017 Delphix. All Rights Reserved. Private and Confidential. SQL Server Negatives Heavily vulnerable to fragmentation over standard Oracle indexing. Last Page Insert Latch Contention- not an issue in Oracle. Subject to hotspots, (as discussed.) Page Splits- hit performance HARD, especially tran log. Fillfactor is hit or miss config in some systems.
  • 68. © 2017 Delphix. All Rights Reserved. Private and Confidential. Summary- Clustered Index Clustered Index: Less overhead during transactional processing for inserts, updates and deletes Improved performance on queries of data to be sorted in sequential order. Similar performance for complex queries and less sort temp usage. Clustered Indexes are common place, IOTs have limited use case.
  • 69. © 2017 Delphix. All Rights Reserved. Private and Confidential. Summary: IOT Will require more maintenance if the IOT experiences high processing including inserts, updates and deletes. DBCC rebuilds of a clustered index uses less resources and doesn’t impact the transaction log as it does Oracle’s rollback and archive log. It was easier to build the table with a high pct free storage configuration and then do an insert of the data, then drop the old table than to do an “alter move” command.
  • 70. © 2017 Delphix. All Rights Reserved. Private and Confidential. • Oracle –Requires more memory –Can adjust for hybrid environments –Can take advantage of scalability, such as RAC –As with many Oracle features, there is a heavy tax on sorting and hashing to temp tablespace past standard allocation in memory. Columnar Index • SQL Server –Requires more knowledge and manual work from DBA –More maintenance –Focused on OLAP improvements –Impacted by latency from logging on inserts, updates and deletes.
  • 71. © 2017 Delphix. All Rights Reserved. Private and Confidential.© 2017 Delphix. All Rights Reserved. Private and Confidential. Kellyn Pot’Vin-Gorman Technical Intelligence Manager kellyn@delphix.com http://dbakevlar.com

Notas do Editor

  1. These are just basic storage features we’re testing, so no concerns about using either of these. Both are hosted in the cloud.
  2. Now these are on my laptop- my Surface Pro 4 with 16G of memory and another 24G of swap from SSD. This is how I role.
  3. This started out on research done between Paul Randall’s work, which then created interest for me to compare to Oracle’s Richard Foote. Both focus on index performance and I was able to adapt their work to perform a comparison. It isn’t a true apple to apple comparison, but I do think it helps to understand the differences with respect to each platform. This is based off two major players in the Database realm, (I may introduce MySQL or another database to make it more interesting in the future.) but had fun moving it from my local VMs to Amazon and Azure. My Amazon environment is busy being used for a huge demonstration build for my Oracle Open World talk, so I had to scour my index play from it to ensure I didn’t impact what my partner from another company was building.
  4. In Oracle every record has a unique (inside the table) 10 byte pseudocolumn ROWID representing the physical location on disk that the record is stored. When printed, each ROWID is displayed in BASE64 format (A-Za-z0-9+/): Yes, we can query the row by ROWID. Because of ROWID being so fast, Oracle has little to no knowledge of the power of clustered indexes. There simply is no reason for them in Oracle. Our values for free space, (aka PCTFREE) vs. the default left on a page in SQL Server, leave space free that in SQL Server is utilized. ROWID: In BASE64 Format details the schema, table, tablespace, row and block that the data is stored in. Rowids are the fastest way of accessing  rows. Rowids can be used to see how a table is organized. Rowids uniquely identify rows in a given table.
  5. Main translations that will be required for this session This is what all DBAs think of when we hear IOT. Not Internet of Things, but Index Organized Table. The reuse of acronyms will be the death of us all. It’s the closest thing to what SQL Server uses for it’s initial index on any table. Where data sorts are almost expected on the first, indexed column, Oracle invests highly on temp “tablespace”, (similar to filegroups in SQL Server) which performs all sorts and hashes, etc. that won’t fit inside the PGA, (Process Global Area) of the SGA, (System Global Area) which are separated areas of memory to perform tasks. SQL Server uses a Temp database to perform similar processing. I’ll skip over the next one, as we’ll dig into these in a moment. Although Oracle and SQL Server has Sequences, I used older terminology and syntax here and I wanted to point that out, as with dbms_random, which is a built in package, (group of procedures, etc.) to populate data in Oracle. A page and a block is very similar and then we have the AWR and DMVs, which are very similar, but Oracle saves off aggregates of this performance data long term, 1 hr, 1 week, 30 days, 1 year and DMVs of course, have some data that is only cached and must be called with functions. I won’t dig into the newest performance data added as of SQL Server 2016, the query store. The data is vast, but its’ still in its infancy and didn’t provide the basic information that I was looking for my comparisons. It’s much more like tracing with wait events stored in the database, where I find the DMVs to be more like AWR with a limited retainment.
  6. Along with standard backend processes that perform actions, we need to focus on how sorts are performed- PGA SQL Server doesn’t have PGA. The indexes are assumed, for the PK or at least one per table, will be pre-sorted except for a few rows. Anything that doesn’t fit inside PGA in Oracle will spill over to the TEMP Tablespace, which is often simple disk, (more often these days SSD or flash) offering faster performance on those sorts. In SQL Server, non-sorted data will be sorted in memory, if not, then spills to a separate databse, the TEMP DB. ROWID: OOOOOO: The data object number that identifies the database segment (AAAAao in the example). Schema objects in the same segment, such as a cluster of tables, have the same data object number. FFF: The tablespace-relative datafile number of the datafile that contains the row (file AAT in the example). BBBBBB: The data block that contains the row (block AAABrX in the example). Block numbers are relative to their datafile, not tablespace. Therefore, two rows with identical block numbers could reside in two different datafiles of the same tablespace. RRR: The row in the block.
  7. The percentage you fill the page by default is set to 80, but many state, if the database isn’t an OLTP, set it to 100. Keep in mind, the indexes are clustered or sorted, so why impact what is there when you’ll have to rebuild it at some point anyway…
  8. The default for Oracle versions 11g and DB12c is 10% Oracle rarely would recommend you change this, but many old school DBAs still mess with this setting and I’ve come across many databases that have been upgraded over the years that still have object with odd settings for individual objects, (tables and indexes.)
  9. In a clustered index, the leaf rows of the index are the data rows of the table; therefore, the intermediate sort runs contain all the data rows. In a nonclustered index, the leaf rows may contain nonkey columns, but are generally smaller than a clustered index. If the index keys are large, or there are several nonkey columns included in the index, a nonclustered sort run can be large. And can often spill over to the TEMP DB The Page Splits/sec counter is one of the "piece of string" counters for which no absolute value should be assumed a breaking point for performance challenges. The counter can vary depending on table size, density, index depth, workload and workload type. Page Splits are an occurance on clustered indexes, which are an advanced feature for indexing as a whole and a standard feature for SQL Server. A split happens, as shown here, when there isn’t enough room in a page and the data needs to write to the beginning of a new page. SQL Server needs to hold a latch for an extended period of time to alocate the new latch, copy data from the old page to the new page and then write the new data to the new page. SQL Server can also take additional latches on the intermediate index pages while in wait. This is the reason that rebuilds of indexes is still a common task in MSSQL. This is a higher latency wait when concurrency is added to the mix.
  10. From the power dynamic mgnt view, dm_db_index_usage, we can locate when there are indexes that are fragmented and impact performance in MSSQL.
  11. Oracle leaves "dead" index nodes in the index when rows are deleted. While rebuilding indexes is a topic that’s heavily debated, there are some poor coding choices or application processing that can offer a reason for index rebuilds. You’ll come across an index that’s space consumption is larger than the table is sources from. This is rare though and as I said, it can be resolved by fixing the code or the application code.
  12. We’ll do this a number of times as we simulate poor processing that would cause issues in page splits, data storage and impact to performance.
  13. Create table, primary key on C1 to be populated by a sequence and trigger and index on C2 This matches the default of the SQL Server side of 80% fillfactor.
  14. Create Sequence and Trigger to insert before each row.
  15. Insert in 7 rows to fill up one block. Because I have a sequence and trigger in place, I only need to add the random data, 200 char and the current date.
  16. We have one leaf block and no deleted lf rows.
  17. This time we’re now using 8 leaf blocks, as each row requires one block each. We’re also very little percentage.
  18. Notice the fillfactor is now 10 and insert in one more row…
  19. Insert 1 million rows
  20. This is the first 8 rows from the initial test and the 1 million from the second test. Now delete rows where c2 includes the value of 200
  21. Notice our leaf blocks now and our used space.
  22. Our table has grown substantially from where we’ve started with a number of load processes and transactions to create fragmentation, storage changes, etc. And we show, we’ve deleted the rows we desired.
  23. Let’s load another 1 million rows into our Azure table with the clustered index.
  24. Thanks to Paul Randall for much of the original research that I was able to then build comparisons to Richard Foote’s research on the Oracle side.
  25. Notice the inserted “junk data” we’re using for our examples. Using our IOT, we’ll remove rows from the middle of the table.
  26. Vs. an index rebuild, we need to use a table rebuild statement here, since the INDEX IS a TABLE, as demonstrated here. Considering the amount of rows and not just the rows need to be compressed, but also sorted for an IOT, this will take some time.
  27. A columnstore index stores data in a column-wise (columnar) format, unlike the traditional B-tree structures used for clustered and nonclustered rowstore indexes, which store data row-wise (in rows). A columnstore index organizes the data in individual columns that are joined together to form the index.
  28. SQL Server entered the Column Store Indexing business before Oracle with SQL Server 2012. Their earlier version provided extensive performance gains but were read only. Oracle placed heavy weight behind their inmemory product, even putting Maria Colgan as the voice for it, (now with Ask Tom) Clustered column store indexes are no longer read only, fixed back in version 2014
  29. This is a replacement for the current index to a columnstore index on the existing table. Now we need to check what we have.
  30. Once turned on, Oracle will build out most of the indexes, just point them to the tables that are of interest. Indexes are dynamically created in memory, vs. SQL Server where it must be done manually.
  31. We’re going to create our in-memory table from our c1 column in our ORA_INDEX_TST table and let Oracle In Memory manage it.
  32. There were a few other steps that had to be performed before this would be ready, but you get the idea…
  33. Oracle having ROWID adds space, but adds performance when using indexing. B+ tree indexing, aka clustering indexes leaving a lot to be desired in Oracle. There are few use cases that require an IOT and less likely to take advantage of them. SQL Server has considerable overhead in standard PK like indexing as Oracle does and it just doesn’t make sense. The architectura difference have created index variations that take advantage of the features for each platform.
  34. in SQL server, an Oracle DBA will underestimate the performance hit that comes with using a large composite primary key on a SQL server Clustered table.