Introduction
Bien qu’il soit hasardeux, voire dangereux, de comparer deux technologies si différentes que Sybase ASE et Sybase IQ, il apparaît pratique dans certains cas de pouvoir intégrer leurs caractéristiques propres en les mettant en relief par le biais d’une comparason méthodique (architecture, verrouillage, transactions, commandes, etc.).
Les professionnels d’une technologie désirant aborder l’autre pourront ainsi obtenir quelques équivalences, si tant est qu’il puisse y en avoir, ils auront au moins un point d’entrée vers la notion abordée.
Le parallèle est aussi réalisé entre les deux moteurs pour souligner les options et paramétrages systèmes du moteur IQ qui le rendent compatible et interopérable avec le moteur ASE (langage, typage…). Cette interopérabilité facilite notamment les passerelles entre les deux moteurs pour les chargements de données, la consultation de l’historique de Sybase IQ depuis un serveur Sybase ASE et cette interopérabilité est grandement exploitéee par l’option Real Time Loading for IQ de Sybase Replication Server.
Architecture
Caractéristiques générales
Thème | ASE | IQ |
---|---|---|
Exploitation | Transactionnel (OLTP) On Line Transactional Processing | Décisionnel (Datawarehouse) |
Stockage des données | Stockage en lignes Chaque page de données contient une ligne entière, méthode la plus efficace pour extraire et ecrire un petit nombre d’information, caractéristique du transactionnel. | Stockage en colonnes
Chaque page de données contient les
informations d’une seule colonne : méthode
la plus efficace pour filtrer ou extraire
un très grand nombre d’informations,
caractéristique du décisionnel.
Pour cette raison, les paramètres relatifs
aux stockage en ligne comme le mode de
verrouillage (locking scheme), les paramètres
max rows per page , expected row size sont
sans équivalent sous IQ. |
Compression | Non | Double compression naturelle :
|
Système | 1 moteur :
|
2 moteurs :
|
OLAP | Non | Supporté |
Dialectes SQL | 1 language SQL :
|
2 languages SQL :
|
Processus | 1 processus par 'engine', threads internes au sein de chaque processus. | 1 processus unique 'multithreadé'. |
Architecture | 1 instance = plusieurs bases
Équivalence de master+sybsys* : métadonnées
(metadata) + structures et procédures systèmes.
Les procédures et objets utilisateurs sont
enregistrés dans les bases utilisateurs. |
1 instance = 1 base Les bases multiples sont possibles, mais non recommandés. Le catalogue SYSTEM contient les métadonnées, structures, procédures systèmes ET les objets utilisateur (vues, procédures stockées…). |
Supports physiques de stockage | device
Possibilité de créer des devices sous forme de
fichiers ou de raw device.
|
dbspace
Pour le catalogue, le dbspace est obligatoirement
un fichier. Pour les dbspace utilisateur, le
support peut être un fichier ou un raw device. |
Journalisation | Certaines opérations peuvent ne pas être
journalisées (fast bcp, select into … ) |
Pas d’opération non journalisée |
Indexes
Thème | ASE | IQ |
---|---|---|
Types | 2 types d’index différents :
|
7 indexes diférents
|
Usage | create index APRÈS chargement des données |
create index AVANT chargement des données |
Liste des indexes | sp_helpindex TABLE / sysindexes |
sysiqvindex / sysiqidx |
Verrouillage
Thème | ASE | IQ |
---|---|---|
Écriture | Écriture simultanée sur une table possible moyennant verrouillage. | Non supporté (IQ n’est pas un moteur OLTP !). Les ordres d’écriture sont mis en file d’attente ou en erreur. |
Lecture | Les lecteurs sont bloqués par une écriture en cours Avantages : garantie transactionnelle implicite du périmètre. Inconvénients : contention possible. | Les lecteurs lisent la dernière version
disponible (snaphots)
Avantages : pas de contention de verrous.
Inconvénients : pas de garantie transactionnelle
de type ACID. Les différentes versions
des snapshots doivent être maintenues en mémoire
tant qu’un lecteur n’a pas lancé la commande
commit . Des problèmes d’allocation d’espace
peuvent se produire. |
Niveau d’isolation (Isolation level) | Isocation level 1 (read committed )
par défaut. Seules les données validées sont
lues. |
Isolation level 3 par défaut (serializable ). |
Sécurité
Thème | ASE | IQ |
---|---|---|
Comptes / Rôles | dbowner (propriétaire des objets) : dbo .
Le catalogue utilisateur (sysobjects ,
sysindexes …) est stocké dans la base
utilisateur et appartient au propriétaire
dbo de la base |
dbowner (propriétaire des objets) : object owner ,
schema .
Les objets du catalogue appartiennent au
compte sys .
|
SA | Administrateur système : compte sa, rôle sa_role | Administrateur système : DBA |
SSO (Security Officer) | Rôle sso | Pas d’équivalent DBA |
DDL | grant create table, grant create view… | Rôle resource |
Vues systèmes | sysdevices , tables MDA… : propriétaire sa
(dbo de la base master). |
Propriétaire sys |
Partitions
Thème | ASE | IQ |
---|---|---|
Partitions | Le partitionnement physique aléatoire (round robin) permettant entre autres la mise en œuvre de stratégies de parallélisation existe depuis les versions ASE 11.5 (1998…). Depuis la version 15.0 (2006), le partitionnement sémantique est possible (partitionnement par intervalles, par liste, par valeurs de hachage : RANGE, LIST, HASH). | Disponible à partir de Sybase IQ 15.0 Le partitionnement sémantique est inutile à moins de 1 To de données. Le partitionnement sémantique sous IQ a plus été imaginé pour le cycle de vie des applications. Les partitions les plus anciennes et les moins accédées sont déplacées sur des espaces de stockage moins puissants et moins coûteux que les partitions les plus récentes et les plus accédées. Une caractéristique du moteur IQ consiste à remplacer l’I/O par un usage CPU intensif. Par nature donc, IQ est consommateur de ressources de calcul. Les stratégies de partitionnement dans un SGBD classique ont deux axes de fonctionnement. Dans le cadre sémantique, on offre une possibilité de filtrer sur un ensemble identifié de données. On procède par élimination de partitions : les données ne peuvent être triées que sur un axe unique dans cette technique. Le deuxieme cadre, historique, est le partitionnement de type "round robin" qui vise à créer une structure où les données sont réparties dans des sous ensembles de taille réduite. L’interrogation de ces structures est réalisée en utilisant toutes les ressources disponibles grâce à du parallélisme : c’est une technique utilisable en mode batch. À propos du moteur IQ : dans le cas du partitionnement sémantique, le stockage en colonnes, les Fast Projection et les bitmaps limitent par nature le besoin d’avoir à éliminer des partitions. Dans le partitionnement aléatoire (round robin), il va falloir composer avec la puissance de la machine, celle-ci étant déjà fortement mise à contribution par IQ par nature. Pour ces raisons, en deça d’un volume important, le partitionnement ne s’avère pas forcément être une option indispensable. |
Exploitation des données
Typage
Thème | ASE | IQ |
---|---|---|
bit |
1=true, 0=false |
identique |
Types chaîne | nchar/nvarchar/unichar/univarchar |
char/varchar |
char |
< 2K (ou 4,8,16 ).
Dépend de la taille de page du serveur |
char< 32K |
varchar |
<2K (ou 4,8,16 ).
Dépend de la taille de page du serveur |
varchar , stocké en réalité comme un char
avec l’option TRIM_TRAILING_BLANKS |
long varchar |
non supporté | < 512 T |
datetime |
datetime
(millisecondes arrondies au 1/300)
Format par défaut : MMM-DD-YYYY |
timestamp / datetime (alias de timestamp )
Attention, le type timestamp IQ est
un type datetime contrairement à ASE
Format par défaut : YYYY-MM-DD |
date |
date |
date |
time |
time |
time |
timestamp |
varbinary , ne représente pas une date
mais une version de données |
datetime sous IQ |
numeric |
numeric
Précision par défaut : 18,0 |
numeric
Précision par défaut : 30,6 |
real |
real : 4 octets |
real : 4 octets |
double |
double : 8 octets |
double : 8 octets |
float |
float : 8 octets |
float : 4 octets
Équivalent au type "real " : voir l’option
FLOAT_AS_DOUBLE pour la compatibilité avec ASE |
text/image |
text/image : 2 Gb |
long varchar < 512 T |
Java | java |
Non supporté |
Types disponibles | sp_datatype_info |
sp_iqdatatype null,null,'SYSTEM' |
Chargements de données
Thème | ASE | IQ |
---|---|---|
Chargements massifs | bcp
Commande externe permettant de charger dans
une table toute structure texte délimitée.
|
load table
Commande interne à l’instance permettant de
charger dans une table toute structure texte
délimitée.
|
Données distantes (CIS) | select from proxy_table
Permet d’adresser tout type de données
distantes : ASE, IQ, fichier texte, mais aussi,
moyennant des connecteurs sous licences,
Oracle, MSSQL, DB2… |
select from proxy_table
Permet nativement d’adresser des données ASE
et IQ distantes. Des interfaces ODBC et JDBC
permettent tout type de connexion hétérogene
(Oracle, DB2…). |
Insert location | Non | insert location ...
Syntaxe spécifique à IQ permettant des
chargements massifs performants à partir de
données en provenance d’un serveur ASE
ou d’un serveur IQ. |
Procédures
Thème | ASE | IQ |
---|---|---|
Création | Types de données définis par le premier ordre
select retourné à l’appelant
|
Types de données déclarés par RESULT
en langage Watcom-SQL
Compatibilité Transact-SQL assurée pour garantir
la création de procédures stockées identique à
un serveur ASE.
|
Passage de paramètres | in : @val type
out : @val type output
|
IN val type
OUT val type
Le caractère @ est optionnel sous IQ (mais
supporté) |
Déclaration de variables | La déclaration de variables peut avoir lieu
n’importe où dans le code.
|
Une variable créée avec la commande
CREATE VARIABLE persiste durant la
session même si elle est créée dans un bloc
BEGIN .. END .
Les syntaxes ASE SET et SELECT sont supportées
pour les affectations de variables.
Les variables créées avec la commande DECLARE ne
sont persistantes que dans le bloc BEGIN .. END
dans lequel elles sont déclarées.
|
Allocation |
|
Utiliser de préférence la commande SET .
Pour la commande SELECT , la clause from dummy
est optionnelle mais importante. Si elle est omise,
la compatibilité Transact-SQL fonctionne mais la
requête est parsée par la couche ASA avec un
surcoût. |
Conversion de language | Sans objet (un seul langage : Transact-SQL) | La fonction TransactSQL(commande) transforme
une commande Watcom-SQL en Transact-SQL.
La fonction WatcomSQL(commande) transforme de
la syntaxe Transact-SQL en langage Watcom SQL
La fonction SQLDialect(commande) retourne le
type de syntaxe (Transact-SQL ou Watcom). |
Gestion d’erreur | La gestion d’erreur affecte la variable globale
@@error et exécute l’instruction suivante.
|
La gestion d’erreur affecte SQLSTATE et SQLCODE
et quitte le programme.
L’instruction ON EXCEPTION RESUME simule le
comportement Transact-SQL
|
Tables temporaires
Thème | ASE | IQ |
---|---|---|
Globales | Correspond à la création d’une table physique
dans la base tempdb.
Elle est effacée au redémarrage de l’instance
(configurable, model et/ou traceflag ) .
Chaque utilisateur ayant les permissions sur
cet objet voit les données communes.
Exemple : User1 peut insérer les données
dans la table globale.
Exemple : User2 peut voir le contenu de la table globale
|
La table temporaire est créée une seule fois.
Elle persiste après le redémarrage de
l’instance.
Chaque utilisateur possède sa version de la
table temporaire.
Le contenu de la table est vidé après chaque
commit , configurable avec
l’option ON COMMIT PRESERVE ROWS
Exemple : User1 peut insérer les données dans
la table globale. Attention, les lignes sont
vidées apres l’ordre commit
Si la table est recréée avec l’option ON COMMIT PRESERVE ROWS , alors
comme son nom l’indique les données seront
préservées.
Néanmoins, un deuxième utilisateur, ne verra que sa propre version des données
|
Locales | Ces tables temporaires sont locales
à la session utilisateur courante et invisible
pour les autres connexions.
Elle est supprimée lors de la déconnexion de
l’utilisateur (ou lors d’une commande de
suppression explicite ).
|
Elles sont locales à la session utilisateur courante
et invisible pour les autres connexions.
Elle est supprimée lors de la déconnexion de
l’utilisateur (ou lors d’une commande de
suppression explicite ).
2 syntaxes pour IQ :
ou
|
Divers
Thème | ASE | IQ |
---|---|---|
Truncate | truncate = DDL
(Data Definition Language) |
truncate = DML
(Data Manipulation Language)
La commande rollback est possible |
Compteur automatique | identity
L’insertion et/ou la mise à jour implicite est
possible
L’usage d’une instruction
select identity_col into ... maintient
le caractère 'identity ' de la colonne |
DEFAULT AUTOINCREMENT (identity supporté
pour compatibilité)
L’insertion et/ou la mise à jour implicite est
possible
L’usage d’une instruction
select identity_col into ... ne propage pas
le caractère 'AUTO INCREMENT ' |
Computed columns (colonnes calculées) | Oui | Non |
defaults/rule | create default/create rule |
create domain
Les valeurs par défaut sont supportées à partir de
la version IQ 12.7 |
Déclencheurs (triggers) |
|
Non supportés pour les tables. Seuls les triggers systèmes sont supportés. |
Create table (NULL/NOT NULL) | Si le caractère NULL ou NOT NULL
est omis, NOT NULL est appliqué par défaut
|
Si le caractère NULL ou NOT NULL
est omis, NULL est appliqué par défaut
|
Langage SQL
Jointures / group
Thème | ASE | IQ |
---|---|---|
Subquery on clause | Oui | Non |
Full outer join | Non supporté | Oui
|
Join index | Non supporté | Oui
|
Union in subquery | Oui
|
Non, déconseillé |
group by | Oui | Oui |
group by all | Oui
|
Non supporté |
Projected non group column | Oui
|
Non |
Compute by | Compute by
|
La commande compute by en elle même n’est pas
supportée, les commandes OLAP (ROLLUP ) permettent
d’obtenir des résultats équivalents. |
Traitement des valeurs NULL et des chaînes vides
Thème | ASE | IQ |
---|---|---|
Gestion des valeurs NULL | Si jamais il y avait besoin de le rappeler :
la valeur NULL se teste avec IS [NOT] NULL
Par défaut diffère de la norme ANSI
(set ansinulloff ).
null=null => vrai
|
Par défaut respecte la norme ANSI
(set ansinull on ).
null=null => faux
|
0 length string | zero length string != NULL
Chaîne vide = un caractère espace
|
zero length string != NULL
Valeur réelle
|
Syntaxe SQL de base
Thème | ASE | IQ |
---|---|---|
Quotes | double_quote est equivalent à simple_quote
" = ' |
double_quote est différent de simple_quote
" != ' sauf si set quoted_identifier est appliqué |
Concaténation | Concaténation de chaînes : + |
Concaténation de chaînes : + ou || |
Validation de commande | Commande : go |
Commande : ; |
Date du jour | select getdate() |
select getdate() from dummy
Il est syntaxiquement possible d’omettre la
clause FROM , néanmoins les performances en
sont dégradées. Dans ce cas en effet la requête
est interprétée par le moteur ASA, non par IQ |
Fonctions SQL
Thème | ASE | IQ |
---|---|---|
Recherche de texte | patindex
|
patindex , sans les options
USING CHARACTERS , ni USING BYTES
locate
|
Fonctions ASE | curunreservedpgs , data_pgs , host_id ,
host_name , lct_admin , reserved_pgs ,
rowcnt ,valid_name , valid_user ,
ptn_data_pgs , index_colorder |
N/A |
Contains | Oui, uniquement dans l’option FullText (FTS) de Sybase ASE. | Oui, index WORD |
Taille d’une chaîne | len |
length |
tsequal (comparaison de timestamp) | tsequal |
Non |
rownum | Non supporté | rowid
|
Transtypage | convert/cast |
convert/cast |
Minuscule/ Majuscule | lower/upper
|
lcase/ucase
Compatibilité Transact-SQL : lower/upper
autorisés
|
udf (User Defined Functions) | Les fonctions udf sont supportées à partir de Sybase ASE 15.0.2 | Les fonctions udf sont supportées.
Même restriction que pour 'select ... from dummy ',
la couche ASA est sollicitée, donc plus lente. |
Fonctions de manipulation des dates
Thème | ASE | IQ |
---|---|---|
dateadd | Oui | Oui |
date +/- int : | Non
Utiliser dateadd
|
Oui
Résultat de type datetime
|
date + time | Non supporté
Utiliser dateadd |
Oui
Résultat de type datetime
|
Commandes select into
Thème | ASE | IQ |
---|---|---|
select into : table | Oui | Oui Attention, syntaxe qui permet aussi l’affectation de variables |
select into : #temp | Oui | Oui |
select into : existing table | Oui | Non |
select into : proxy table | Oui | Non |
Updatable views | Oui | Oui |
Administration
Gestion de la base
Thème | ASE | IQ |
---|---|---|
Création |
|
pour assurer une compatibilité avec ASE, ajouter
les options CASE RESPECT et BLANK PADDING ON |
Ajout d’espace |
|
|
Gestion des devices | disk init , disk mirror ,
disk refit , disk resize |
N/A |
Devices | sp_helpdevice / master..sysdevices |
sysdbfile / sysiqdbspace
|
Casse | Gérée au niveau de l’instance, dépend de
l’ordre de tri installé au niveau serveur
('sort order '). L’ordre de tri est
reconfigurable (par défaut Case sensitive ).
Les règles s’appliquent de la même manière
pour les données et identifiants
sp_helpsort |
Gérée à la création de la base
(create database ... CASE respect|ignore ).
Non reconfigurable.
Les identifiants sont insensibles à la casse.
|
Surveillance, administration
Thème | ASE | IQ |
---|---|---|
Liste des processus | sp_who |
sp_iqwho
sp_iqclient_lookup / sp_iqconnection /
sp_iqcontext
sa_conn_activity |
État du serveur | sp_server_info
sp_sysmon |
sp_iqstatus
sp_iqsysmon (IQ 12.7/15.0)
IQ Utilities (IQ 12.x) |
Verrous | sp_lock |
sp_iqlocks |
Taille de base | sp_helpdb |
sp_iqdbspaceinfo / sp_iqdbspaceobjectinfo |
Liste des bases | sp_databases
select name from master..sysdatabases |
Non supporté.
Si l’on considère qu’une base est un schéma :
|
Taille d’une table | sp_spaceused SECURITY_ANALYTICS |
sp_spaceinfo 'table SMF.SECURITY_ANALYTICS'
sp_iqtablesize 'SMF.SECURITY_ANALYTICS' |
Configuration d’une instance | sp_configure
Permet de voir et modifier les options au niveau
serveur
Table système : sysconfigures |
sp_iqcheckoptions
Cette commande n’est que de la consultation, pour
modifier un paramètre : set [ public ] option
Tables systèmes : sysconfigures / sysoptions
Les options sous IQ peuvent être définies au niveau
public, utilisateur ou temporaire
(à la session courante). |
Estimation de taille | sp_estspace
|
sp_iqestspace
|
Liste des objets | sp_help
|
sp_iqhelp
sp_iqhelp null,null,'table'
sp_iqtable
sp_iqhelp null,null,'view'
sp_iqview
sp_iqhelp null,null,'procedure'
sp_iqprocedure |
Caractéristiques d’une colonne | sp_help
sp_columns |
sp_iqcolumn
sp_iqrowdensity 'table SMF.SECURITY_ANALYTICS' |
Catalogue des objets | sysobjects |
sysobjects / sysiqobjects |
Taille des indexes | sp_spaceused TABLE, 1 |
sp_iqindexinfo / sp_iqindexsize
sp_iqindexinfo 'table SMF.PORTFOLIO'
sp_iqindexsize 'SMF.PORTFOLIO.ASIQ_IDX_FP' |
Utilisateurs | sp_helpuser
Table système sysusers |
Non supporté
Tables systèmes sys.sysuser et sysusers
|
Historique des sauvegardes | Non implémenté |
|
Statistiques | Tables mda, variables @@cpu … |
sp_iqstatistics |
Transactions | sp_transactions |
sp_iqtransaction |
Base de données | sp_helpdb |
sa_db_info / sa_db_properties |
Serveurs distants
Thème | ASE | IQ |
---|---|---|
Remote server (serveurs distants) | sp_addserver
|
create server
|
Recherche de serveurs | sp_helpserver |
select * from sys.sysservers |
Tables systèmes
Thème | ASE | IQ |
---|---|---|
Tables systèmes equivalentes et/ou simulées | syscolumns , syscomments , sysindexes ,
systypes , sysusers , syslogins |
ok |
sysobjects |
sysobject , sysobjects |
|
Tables/vues systèmes spécifiques | sysalternates , sysconstraints , sysdepends ,
syskeys , syslogs , sysprocedures ,
sysprotects , sysreferences ,sysroles ,
syssegments , systhresholds , syscharsets ,
sysconfigures , syscurconfigs , sysdatabases ,
sysdevices , sysengines , syslanguages ,
syslocks , sysloginroles , sysmessages ,
sysprocesses ,sysremotelogins , ysservers ,
syssrvroles , sysusages |
sysviews , systab |