Sybase

Sybase jpp

Un chapitre sur Sybase comprenant plusieurs articles dont le premier concerne l'inévitable installation. La version présentée ici est la version 15 de Sybase dans la déclinaison "développeur" qui est complètement fonctionnelle et ne souffre que de faibles limitations ( essentiellement limitée à un process serveur). 
L'installation a été réalisée sur un support "Centos" en version 5.4 (X86_64 en machine virtuelle XEN) qui convient très bien à la version la plus récente de Sybase. 
Une installation de la partie système est détaillée dans un autre article. 
La machine virtuelle d'installation dispose de :

  • 1 CPU
  • 1536 Mo de RAM
  • 3 disques de 16 Go 
    • un pour le système
    • un pour les données
    • un pour les log et les espaces temporaires

Je dispose par ailleurs d'une machine virtuelle Oracle 10g (sur Oracle Linux 4.8) présentant des caractéristiques analogues, cela permettra d'établir quelques comparaisons.

Sybase : Installation

Sybase : Installation jpp

Rappel : La machine choisie pour cette installation est une machine fraîchement installée avec une Centos 5.4 sous XEN zt munie de :

  • RAM : 1,5G
  • CPU : 1
  • Disques :
    • 16G système
    • 16G données
    • 16G temporaire et logs

Bien que l'on puisse avec profit en performance utiliser des "raw-devices" : partitions non gérées par l'OS, j'ai choisi d'utiliser des fichiers traditionnels du file-système.

Pré-requis : 
- créer un utilisateur "sybase" 
- Créer un répertoire "/opt/sybase" avec propriétaire "sybase" 
- Créer un répertoire "SYBDAT" avec propriétaire "sybase" dans le deuxième disque monté sur /DATA 
- créer un répertoire "SYBTMP" avec propriétaire "sybase" dans le troisième disque monté sur /LOG 

Détarer l'archive dans un répertoire "propre", au premier niveau deux fichiers : 
- un fichier décrivant les limites légales du logiciel 
- setup.bin 
et un répertoire d'archives contenant le logiciel à installer. 

Installation. 
Se connecter en X et ouvrir une fenêtre terminal, dans le répertoire d'installation, un simple "./setup.bin" lance l'installeur (Java comme beaucoup) qui ouvre sa fenêtre en attendant l'appui sur la touch "Next". Tiens pas de français ? 
Après l'appui sur "Next" écran "Choose Install Folder" 
 
L'écran propose "/opt/sybase" il est sage de l'accepter et de cliquer sur "Next". 
L'écran suivant propose 3 options : "Typical", "Full" et "Custom", étant audacieux je choisis "Full", autant disposer du maximum de possibilités. 

L'écran suivant "Software license type selection" : 

N'ayant pas de license, nous choisirons la version "Free developper". 

Puis il faut définir son pays pour lire le contrat de license dans sa langue ... non, une seule possibilité "All regions" et c'est en anglais ... J'aime bien les questions à choix simple ! Je clique "I agree" (ça veut dire quoi ?) et "Next". 

Un pétit écran de récap : 
  
il me semble que tout est là, même "Sybase Central" que l'on avait parfois du mal à trouver et les drivers JDBC et ODBC. L'installation complète consomme un peu plus de 1,1Go. 
Il ne reste plus qu'à cliquer sur "Install", ce que je m'empresse de faire, l'installation du logiciel démarre avec le petit baratin publicitaire défilant qui nous occupe pendant l'installation. C'est vachement à la mode. 
La fin de l'installation arrive et on nous propose de "retenir" ou non les mots de passe. N'ayant pas besoin de sécurité pour des tests je choisis "Enable" par paresse et clique sur "Next". 
On arrive maintenant aux points importants : la configuration des différents serveurs constituant Sybase : 
 
Il vaut mieux les configurer tous dès le début, cela sera toujours cela de fait, on entre ensuite dans un écran spécifique à chaque process serveur. 
Ecran "Configure New Adaptative Server" 
 
nous propose de nombreux paramètres : 
- Nom , celui préparé me va ... 
- Port number : 5000 ne me gêne pas 
- Application type : je garde "Mixed" car je désire faire plein de choses 
- Page size : Les anciennes pages de 2K étaient un peu trop petites, je vais prendre 8K comme la plupart des bases Oracle. 
- Fichiers de log, je les mets tous dans /opt/sybase/log 
- Devices : c'est comme cela que Sybase nomme les fichiers de données, un certain nombre de "devices" sont obligatoires, il s'agit de leur donner un emplacement physique et une taille. Les tailles proposées par Sybase sont en général un peu "justes" pour des machines d'exploitation, mais ici cela devrait nous suffire. Ces espaces obligatoires sont analogues aux tablespaces "System", "TEMP" ... pour Oracle. 
- Master device : /DATA/SYBDAT/master.dat 
- Master device size : 128 
- Master database size : 64 
- System procedure device : /DATA/SYBDAT/sysprocs.dat 
- System procedure device size : 160 
- System procedure database sise : 160 
- System Device : /DATA/SYBDAT/sybsysdb.dat 
- Sstem device size : 32 
- System database size : 32 
- Tempdb device : je le positionne sur un autre disque /LOG/SYBTMP/tempdbdev.dat 
- Tempdb device size : 256 
- Tempdb database size : 256 
- Enable PCI : je le laisse à "no" 
- Optimize ASE configuration : "yes" 
- available physical memory pour ASE : 1024             
- available CPU for ASE : 1 (limité à 1 pour la version developpeur). 
Un petit "Next" et juste un Warning car j'ai choisi des pages de 8K ce qui est incompatible avec le rechargement de bases "anciennes" qui avaient, en principe, des pages de 2K et nous voilà sur le paramétrage du "Backup Server" : 
- Name : je le laisse 
- Port number : pourquoi pas 5001 
- error log : je le laisse 
"Next" nous emporte vers le "Monitor Server" 
- Nom : je le laisse 
- Port Number : 5002 n'est pas pire qu'un autre 
- Error log : je le laisse 
"Next" conduit vers le paramétrage du "Xp Server" avec son port 5003 et son error log, un autre "Next" nous donne accès au paramétrage du "Job scheduler". Tiens un port number à 4900 ? Pour le reste les valeurs par défaut sont convenables. Après le "Next" suivant nous arrivons au "saint des saints" le superuser "sa" sans possibilité de toucher au mot de passe puisque on a choisi "Enable" pour la gestion des mots de passe . 
Et maintenant les "Web Services" avec un paquet de ports et de mots de passe ...on laisse les valeurs par défaut (sauf pour les mots de passe !). 
Encore un "Next" pour le "Self Discovery Service Adaptor" que je choisis de configurer  le "UDP Adaptor" et je refuse le "JNI" comme j'en ai le droit ! 
Encore "Next" pour arriver sur "Security modules" où je ne coche que les deux premiers. Le "Next" nous permet, enfin, d'arriver à la fin de la configuration et le récap nous permet de revoir un peu tous nos choix avant de cliquer un autre "Next" qui déclenche la création de la base de données et l'affichage des logs des scripts de création et c'est la fin de ce roman passionnant 
 
Cette partie est assez longue car Sybase crée les fichiers de data et les remplit intégralement : ce qui est pris n'est plus à prendre, la place prise est bien réservée. 
Avant de pouvoir s'en servir allons voir un peu le répertoire d'installation qui comporte plein de répertoires ... avec de nombreux sous répertoires "bin" qu'il va falloir ajouter à notre "PATH" avant de pouvoir faire mumuse. 
Heureusement on peut trouver dans "/opt/sybase" le merveilleux script "SYBASE.sh" qui fait çà très bien ". /opt/sybase/SYBASE.sh" résout ce problème pour nous. 
Dans un prochain épisode le lancement des premières commandes, vous apprendrez à mettre des "go" partout dans "isql". 
Pour vous mettre l'eau à la bouche une petite image de l'outil de gestion "Sybase Central" 
 
que l'on peut lancer par : 
./shared/sybcentral600/scjview.sh 
puis se connecter (clic droit sur "Adaptative Server Enterprise" + "Connect", pas de mot de passe (il est stocké, rappelez vous le "Enable". Ici beaucoup de choses se commandent par le "clic droit" et les menus associés. 
Vous avez alors accès au module central de gestion de Sybase qui vous permet même de gérer plusieurs serveurs simultanément, ce module est une véritable "tour de contrôle".

Sybase : ajustements

Sybase : ajustements jpp

Après l'installation il reste toujours quelques "bricoles" à faire pour avoir un système plus commode et agréable à utiliser.Modifier le .profile (ou le .bashrc) du user de test pour y insérer l'appel à "/opt/sybase/SYBASE.sh" afin de pouvoir travailler sans penser sans arrêt à frapper : 
. /opt/sybase/SYBASE.sh 
Un certain nombre d'ajustements sont indispensables, par exemple "isql" n'aime pas ma locale "fr_FR@euro" (variable LANG), il faudra "forcer" la valeur de LANG à une valeur compatible avec celles existant dans le fichier "/opt/sybase/locales/locales.dat". 
Mettre en place la langue "français". 
Il faut passer par l'utilitaire "sqlloc" (/opt/sybase/ASE-15_0/bin/sqlloc) qui  permet de réaliser cet exploit dans un mode semi-graphique 
  
Ne pas oublier de modifier le "default character set". 
Ma machine utilise les "locales" fr_FR.UTF-8 il m'a fallu pour terminer ajouter une ligne descriptive dans le fichier "/opt/sybase/locales/locales.dat" : 
locale = fr_FR.UTF-8, french, iso_1 
est à insérer dans le paragraphe [linux] après "fr_FR.850 ...". Il reste quelques "bricoles" au niveau des caractères accentués dans les messages, mais les caractères stockés dans la base ressortent correctement.. 
Ces petites mises au point permettent d'ajouter au script "SYBASE.sh" les lignes suivantes : 
LANG=fr_FR.UTF-8 
SYB=/opt/sybase 
export SYB 
On peut ensuite oeuvrer tranquilles sans messages, ou refus, intempestifs lors du lancement des utilitaires. 
Avant de faire quoi que ce soit d'autre il faut : 
- créer un "login" pour pouvoir réaliser des tests 
- créer deux "devices" pour pouvoir créer une base de données de test car il est très fortement déconseillé de créer des objets dans les espaces "système". 
 Device numéro 1 pour les "data' 
 Device numéro 2 pour le "log" 
- créer une base de données pour les tests 
Les scripts fournis peuvent être lancés par : 
cd le_repertoire_de_stockage_des_scripts 
isql -Usa -SCOMSYB15 -D master -i le_nom_du_script 
A la demande de password frapper "Entrée" tout simplement. 
Les scripts fournis ici doivent être personnalisés.

  • Script de création du device "DATA" :

disk init name='MABASE', physname='/DATA/SYBDAT/MABASE.dat', vdevno=5, 
size=524288, cntrltype=0, dsync=false, directio=true, skip_alloc= true 
go

  • Script de création du device "LOG" :

disk init name='MONLOG', physname='/LOG/SYBTMP/MONLOG.dat', vdevno=6, size=262144, 
cntrltype=0, dsync=false, directio=true, skip_alloc= true 
go

  • Script de création de la base de données "MABASE" : 
    create database MABASE  on MABASE = 1024 log on MONLOG = 512 with DURABILITY=FULL
  • Script de création du user "test" :

use master 
go 
exec sp_addlogin 'test', 'testpw', @defdb = 'MABASE', @deflanguage = 'french', 
@auth_mech = 'ANY', @fullname='User pour tests' 
go

  • Donner la propriété de la base au user "test"

USE MABASE 
go 
exec sp_changedbowner 'test', true 
go 

Quelques "trucs" : 
- Démarrer le serveur Sybase : 
cd /opt/sybase 
nohup ./ASE-15_0/install/RUN_COMSYB15 
On peut lancer de la même façon le "Backup server" (RUN_COMSYB15_BS) ou le "Monitor Server" (RUN_COMSYB15_MS).  
- Stopper le serveur Sybase 
isql -U user_stop -S COMSYB15 -P mot_de_passe <<!FINI 
shutdown SYB_BACKUP 
go 
shutdown 
go 
exit 
!FINI 
Les scripts nécessaires sont fournis en pièces attachées (root : "sybase" à installer dans /etc/init.d, sybase "start_stop_sybase" à installer dans /home/sybase/bini en enlevant le suffixe ".txt" des fichiers, sans oublier le "chown +x ..." qui va bien).

  • Se connecter avec "isql" :

isql -Usa -P -Snom_serveur -D nom_de_la_base 

Installation des outils nécessaires pour accéder à la base par JDBC. 
Il est nécessaire d'installer un ensemble de tables dans la base "master" afin que la connexion JDBC soit possible sur la base, il existe deux versions de "JConnect" dans les répertoires de Sybase 15 : JConnect 6 et JConnect 7. Ici j'ai décidé d'installer la version 7. 
Ill faut aller dans le répertoire "/opt/sybase/jConnect-7_0/sp" et de lancer le script qui va avec la version de la base, ici le script "sql_server15.0.sql" à lancer par : 
isql -U sa -S COMSYB15 -i sql_server15.0.sql -o MONLOG.LOG 
(répondre "Entrée" à la demande de mot de passe). Il est ensuite possible de se connecter en JDBC aux différentes bases de données contenues dans cette instance.

Sybase : mini test

Sybase : mini test jpp

Le mini test a été réalisé selon la procédure décrite ici. 
Calcul de la différence de dates : 
set statistics time on 
go 
select min(convert(datetime,DATEC)) as MINI,  
       max(convert(datetime,DATEC)) as MAXI,  
       datediff(day,min(convert(datetime,DATEC)),max(convert(datetime,DATEC))) as DIFF, 
       count(*) as CTR  
from xen_stat_v2 
go 
Génération de la table table temporaire : 
set statistics time on 
go 
select  convert( char(10),dateadd(day, DELTA ,convert(datetime,DATEC)),112) as DATEC,  HEUREC,SERVEUR,DOMNOM,DELTACPU,DELTARX,DELTATX,CPUPCT,NBSECR,NBSECW 
into toto 
from xen_stat_v2 
go 
Insertion des rangs calculés : 
insert into xen_statv2 select * from toto 
go 
Après quelques itérations on arrive au volume voulu :  
1> select count(*) from xen_stat_v2 
2> go 
Temps d'analyse et de compilation 0. 
Adaptive Server cpu time: 0 ms. 
Temps d'analyse et de compilation 0. 
Adaptive Server cpu time: 0 ms. 
-----------  
    13174976   
Temps d'execution 18. 
Adaptive Server cpu time: 1800 ms.  Adaptive Server elapsed time: 22970 ms. 
Soit un peu moins de 23 secondes. 

La taille atteinte par le "LOG" est assez conséquente, à cause des ordres insert et a nécessité la mise en place d'un log de 1536Mo pour que le dernier ordre "insert" atteigne la fin,. On a quand même inséré plus de 6,5 millions de lignes. 
Le volume occupé par la table et ses deux index est d'environ 2200Mo. 

Résultats du mini test.

  • Test 1 création de deux index :

Adaptive Server cpu time: 287300 ms.  Adaptive Server elapsed time: 417160 ms. 
Adaptive Server cpu time: 240100 ms.  Adaptive Server elapsed time: 400633 ms. 
Soit un total de #818 secondes ou 13'38 ".

  • Test 2 re-calcul des statistiques :

update statistics MABASE.dbo.xen_stat_v2 
go 
Adaptive Server cpu time: 0 ms.  Adaptive Server elapsed time: 165280 ms. 
Le CPU est à >98% durant tout le calcul qui dure 1'45".

  • Test 3 quelques "select" :

a) select DOMNOM,count(*) from xen_stat_v2 group by DOMNOM order by DOMNOM 
go 
- passe 1 : Adaptive Server cpu time: 0 ms.  Adaptive Server elapsed time: 35983 ms 
- passe 2 : Adaptive Server cpu time: 0 ms.  Adaptive Server elapsed time: 34093 ms. 
Soit #35 secondes 

b) select DOMNOM,count(*) from xen_stat_v2 group by DOMNOM order by DOMNOM 
go 
- passe 1 : Adaptive Server cpu time: 28900 ms.  Adaptive Server elapsed time: 88873 ms. 
- passe 2 : Adaptive Server cpu time: 0 ms.  Adaptive Server elapsed time: 81843 ms. 
Soit #85 secondes 
Sur ces deux tests le CPU monte à plus de 98%