Sybase
Sybase jppUn 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 jppRappel : 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 jppAprè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 jppLe 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%