IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Adaptive Server Enterprise Sybase Discussion :

[ASE 15.0.2]Optimisation insertion ( Tunning )


Sujet :

Adaptive Server Enterprise Sybase

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    254
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 254
    Par défaut [ASE 15.0.2]Optimisation insertion ( Tunning )
    Bonjour
    Je suis confrontée aux lenteurs lors d'insertion 40 enr/s environ.
    J'ai augmenté "default data cache' et j'ai créé large I/O pool pour ce cache.
    Ca n'a eu aucun effet pour l'insertion en cours.

    Quelle piste faudrait-il explorer ?

    Je joins le rapport de sp_sysmon effectué alors que mon insert se poursuivait.
    via la commande sp_sysmon "00:05:00"

    Merci
    msomso
    P.S.
    J'ai supprimé tous les indexes sur la table Cible (sauf le PK car colonne identity).

  2. #2
    Membre éprouvé
    Inscrit en
    Août 2007
    Messages
    134
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 134
    Par défaut
    Bonjour,

    comment l'insertion est-elle faite (insert into .. select/insert into .. values/bcp) ?
    Y-a-t-il plusieurs processus qui font des insert en simultané?
    Quelle est la taille du user log cache, et la log io size de la base (sp_logiosize pour vérifier)?
    Je vois que vous êtes sous solaris.
    Quel est le taux d'utilisation du cpu sur la machine (vérifier avec ps ou prstat)?
    L'activité des disque est elle importante (vérifier avec 'iostat -cntzx 2')?

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    254
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 254
    Par défaut
    Bonjour

    L'insertion est faite par un ETL - phase de migration d'une application.
    Il s'agit de serveur de test/dev (peu sollicité donc).
    EDIT2: Par ailleurs, je suis la seule à travailler sur la base de test. Pas d'insertions en parallèle.ETL s'execute sur un poste client et accède le serveur via le réseau. Les select sont cependant rapides. fin EDIT 2
    Les lignes sont insérées à partir du code java (Insert ... values ...). le commit est fait par 10000 enr.
    J'ai testé aussi ce traitement avec bcp, mais la création du fichier par ETL est lente et j'ai des messages de troncature (overflow) sur une colonne de type "text". Je suis donc revenue sur le mode classique (hors bcp).


    Réponse aux autres questions:
    CPU: 10% à 15 % (avec prstat)
    log i/o size : 2Ko (sp_logiosize)
    activité de disques: cf fichier png ci-joint.
    Edit 1: database device est "d101"

    Merci
    msomso

  4. #4
    Membre éprouvé
    Inscrit en
    Août 2007
    Messages
    134
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 134
    Par défaut
    Je vois 3465615 de cache hits, ce qui me parrait beaucoup pour 60000 inserts.
    Pourriez-vous faire un insert manuellement en ayant fait auparavant:

    set showplan on
    set statistics io,time,plancost on
    go

    Puis me fournir le résultat.

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    254
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 254
    Par défaut
    Bonjour,
    ce serait avec plaisir si je pouvais y passer du temps pour comprendre, mais cela n'est pas possible.
    Je suis donc passée à la version avec bcp suivi d'update spécifique pour la colonne "text".

    Simuler cet insert manuellement me demanderait d'écrire un code spécifique pour ramener l'ensemble de données.

    Merci de votre intérêt.

    msomso

  6. #6
    Membre Expert

    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 307
    Détails du profil
    Informations personnelles :
    Âge : 66
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 307
    Par défaut
    Pour que BCP puisse gérer correctement le champs "text" on peut utiliser l'option -T (taille max du champs texte - par défaut c'est 32k).

    Michael

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    254
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 254
    Par défaut Tests et documentation sybase
    Bonjour
    La lecture de la page du lien m'a laissée confuse. J'ai donc pris du temps pour faire quelque tests.
    Avec 'true' pour l'option 'select into/bulkcopy/pllsort', j'ai fait des tests suivants (cf mon code ci-dessous):

    CAS_FAST
    test F1: table TB sans index + FK _TB_TA
    CAS_SLOW
    test S1: table TB + index PK + FK _TB_TA
    test S2: table TB + index PK + FK _TB_TA + index IDX_TB
    test S3: table TB + index PK + FK _TB_TA + index IDX_TB + false pour 'select into/bulkcopy/pllsort'
    If the table includes nonclustered indexes or triggers, but sp_dboption 'select into/bulkcopy/pllsort' is not enabled, Adaptive Server uses slow bcp, and prints this warning message to indicate that you can improve the performance of bcp by enabling sp_dboption 'select into/bulkcopy/pllsort':

    Performing slow bcp on table '%s'. To enable fast bcp please turn on 'select into/bulkcopy' option on the database '%s
    RESULTATS:
    Je n'ai pas eu l'avertissement cité dans la doc (attendu en test S3). Mon bcp affiche juste ceci (dans tous les tests):
    Starting copy...
    Batch successfully bulk-copied to SQL Server.
    Batch successfully bulk-copied to SQL Server.

    2 rows copied.
    Clock Time (ms.): total = 63 Avg = 31 (31.75 rows per sec.)
    Dans aucun cas la contrainte FK_TB_TA n'a été vérifiée.
    Que ce soit le test F1 ou S1/S2/S3, le BCP insère bien les 2 lignes du fichier dans la table TB .

    Suis-je donc toujours en mode fast, ou bien le bcp ne valide jamais les FK ?

    J'ai cru comprendre que cela était "le prix à payer" mais qu'en mode "fast":
    When you copy data into a table that has one or more indexes, you can use fast bcp. This includes indexes implicitly created using the unique integrity constraint of a create table statement. However, bcp does not enforce the other integrity constraints defined for a table.
    D'après cette citation:
    1. "you can use" et non "bcp uses" suppose que l'on devait pouvoir spécifier le mode voulu, comment le faire ?
    2. les contraintes ne sont pas validées en mode "fast", j"en déduis qu'elles devaient l'être en mode "slow". Ai-je tort ?

    ------------------------ mon brouillon de tests: --------
    le fichier test.csv contient:
    ID;C
    1;A
    2;X

    Le code de mes tests:
    create table mig.dbo.TA (id integer, c varchar(10))
    alter table mig.dbo.TA add constraint UN_C unique nonclustered (c asc) with reservepagegap=1
    insert mig.dbo.TA values (1,'A')
    GO
    drop table mig.dbo.TB
    GO
    --create table mig.dbo.TB (id integer, c varchar(10), constraint PK_TB primary key nonclustered (ID))
    create table mig.dbo.TB (id integer, c varchar(10), constraint PK_TB primary key clustered (ID))
    alter table mig.dbo.TB add constraint FK_TB_TA FOREIGN KEY (C) REFERENCES mig.dbo.TA(C)
    GO
    create nonclustered index IDX_TB on mig.dbo.TB ( c asc)
    GO
    Merci
    msomso
    P.S.
    Je cite la doc du lien : http://infocenter.sybase.com/help/in...ty/X20696.htm:

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    254
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 254
    Par défaut Test supplémentaire
    Bonjour
    Suite à mon post précedent, j'ai effectué encore un test pour arriver à lancer bcp en mode "fast".
    create table mig.dbo.TA (id integer, c varchar(10))
    insert mig.dbo.TA values (1,'A')
    GO
    create table mig.dbo.TB (id integer, c varchar(10)
    --create table mig.dbo.TB (id integer, c varchar(10), constraint PK_TB primary key nonclustered (ID))
    --create table mig.dbo.TB (id integer, c varchar(10), constraint PK_TB primary key clustered (ID))
    GO
    Mon fichier test.csv est inchangé.
    Dans ce cas, en mettant l'option 'insert into ...' de la base à FALSE j'obtiens:
    Starting copy...
    Server Message: BICDEV1 - Msg 4806, Level 16, State 1:
    You cannot run the non-logged version of bulk copy in this database. Please chec
    k with the DBO.

    Server Message: BICDEV1 - Msg 3621, Level 10, State 0:
    Command has been aborted.

    CTLIB Message: - L1/O3/S0/N14/0/0:
    blk_init(): blk layer: CT library error: Failed when CT_Lib routine ct_results()
    called.
    blk_init failed.
    bcp copy in failed
    Question 1 : Est-il possible quand même de faire le bcp en mode slow dans ce cas sans changer d'option de base ?
    Question 2 : Comment vérifier le contenu du log pour m'assurer que l'opération y est ou n'y est pas tracée ?


    Du moment ou j'ajoute un index PK (clustered/nonclustered) bcp s'effectue bien avec l'option 'insert into ...' à FALSE.
    Passerait -il donc automatiquement en mode slow ?

    CONCLUSIONS:
    • BCP passe en mode fast uniquement quand il n'y a aucun index sur la table cible.
    • Indépendamment du mode, les contraintes d'intégrité ne sont pas vérifiées.


    Merci
    msomso

  9. #9
    Membre Expert

    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 307
    Détails du profil
    Informations personnelles :
    Âge : 66
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 307
    Par défaut
    Si l'option "select into" est à fausse, et que la table n'a pas d'index, alors on a le message d'erreur.

    Question: quelle est la version du serveur (select @@version) ?

    Le fast/slow ne peut pas être commandé depuis le client (à ma connaissance), le choix étant déterminé par la présence ou non d'indexes, et l'option "select into".

    Je précise que je n'ai pas beaucoup utilisé bcp en 15.x, je ne suis donc pas vraiment certain du comportement de toutes les combinaisons (indexe ou pas, etc).

    Michael

  10. #10
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Mars 2009
    Messages : 10
    Par défaut
    Bonjour.

    Je ne suis pas familier avec cette version unix et loin d'être un expert mais voici des idées qui me viennent à l'esprit en regardant la sortie de votre sp_sysmon.

    Évidemment ça ne sert à rien de modifier les paramètres du serveur s'il s'agit d'une situation particulière.

    Le I/O polling process count est déjà bas pourtant les checks returning I/O sont élevés...

    Beaucoup de context switch reliés au networking...
    Si vous procédez par bcp pouvez vous utiliser des paquets plus gros?

    Tous les inserts en APL Heap table... Mais pas de blocage au niveau des locks... Ça doit être ok.

    Cache hit ratio a 100%.. Ce n'est pas un problème de cache en lecture.

    99.6% sont des I/O très majoritairement en écriture dans proto_data1.dat
    mais presque rien dans proto_log.dat.. Est ce du fast bulk? ou c'est proto_data1.dat qui est utilisé pour data et log?

  11. #11
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    254
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 254
    Par défaut
    Bonjour

    Pour mpepplerl:
    je suis en ASE 15.0.2:
    1> select @@version
    2> go




    -------------------------------------------------------------------------------
    --------------------------------------------------------------------------------
    --------------------------------------------------------------------------------
    ----------------
    Adaptive Server Enterprise/15.0.2/EBF 14328/P/Sun_svr4/OS 5.8/ase1502/2486/64-b

    it/FBO/Thu May 24 12:18:26 2007
    Le fast/slow ne peut pas être commandé depuis le client (à ma connaissance), le choix étant déterminé par la présence ou non d'indexes, et l'option "select into".
    Oui, en effet. Mais parfois c'est bloquant -dommage de ne pas pouvoir forcer slow pour une table sans index, sans changer d'option de base .

    Pour dbaprod
    J'ai bien les segments data et log sur les devices séparés.
    Ma table cible possède un index et donc au vu de mes tests, le bcp doit s'effectuer en mode "slow".
    La taille du paquet réseau (-A) est à la valeur maxi supportée.
    ***
    De toute façon, suite à mes "découvertes" d'hier je vais devoir renoncer au bcp pour notre migration.
    Il nous faut absolument insérer nos données tout en validant les contraintes d'intégrité,
    or il s'avère que le bcp ne le fait ni en mode slow ni en mode fast.
    ***

    Merci
    msomso
    P.S.
    Pour identifier le mode de bcp, comment peut-on vérifier le contenu de la table log (logsegment ) ?

  12. #12
    Membre Expert

    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 307
    Détails du profil
    Informations personnelles :
    Âge : 66
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 307
    Par défaut
    C'est un aparté - mais il serait probablement judicieux d'upgrader à 15.0.2 ESD 6.

    Pour le bcp - je ne sais pas si on peut directement voir cela dans syslogs - je suppose que c'est possible, mais décoder les enregistrement dans cette "table" est non-trivial - c'est un peu comme lire le redo-log d'Oracle...

    Michael

  13. #13
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    254
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 254
    Par défaut
    Merci
    msomso

Discussions similaires

  1. [Oracle 8]Optimisation insertion
    Par maverickbj dans le forum SQL
    Réponses: 7
    Dernier message: 29/11/2006, 10h55
  2. [Optimisation] Insert Select
    Par fab dans le forum Oracle
    Réponses: 7
    Dernier message: 25/07/2006, 21h09
  3. Optimisation insert select
    Par fab dans le forum Langage SQL
    Réponses: 3
    Dernier message: 20/07/2006, 17h13
  4. [Optimisation] Insert en masse
    Par bobic dans le forum Oracle
    Réponses: 1
    Dernier message: 14/12/2005, 21h11
  5. [Optimisation] Insertion en masse !
    Par m-mas dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 26/10/2005, 16h40

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo