Positionnez un hint grâce au "SQL Profile" par Kerry Osborne

La méthode n’est pas très orthodoxe, convenons-en. Elle permet d’introduire des hints sur des requêtes, ce qui, très souvent est le contraire d’une bonne idée. Elle le fait grâce à un SQL profile au lieu d’un Outline ou d’une baseline SQL Plan Management qui sont les outils faits pour ça. Enfin, elle n’est pas documentée donc non supportée.

Et pourtant, il y a quelques semaines, j’ai démontré l’intérêt d’une préconisation sur un plan en utilisant un SQL Profile. En fait il s’agissait d’introduire un niveau supplémentaire de « dynamic sampling » sur une requête sans toucher aux paramètres d’instance ou de session. Cette approche est intéressante à plusieurs égards :

  • D’abord, elle permet de le faire même si cursor_sharing=exact et que vos requêtes ont des valeurs littérales qui changent, grâce au paramètre force_match
  • Ensuite, elle ne fixe pas le plan mais permet d’ajouter uniquement certains hints bien choisis comme dynamic_sampling, gather_plan_statistics ou monitor
  • Enfin, elle vous permet de le faire sans toucher au code

Mais rendons à César… Le script dont il s’agit est disponible sur Internet. Il appartient à Kerry Osborne, lequel à un blog avec quelques articles exceptionnels. Il s’appuie essentiellement sur :

  • La procédure dbms_sqltune.import_sql_profile, non documentée, qui permet de créer un profile SQL à partir du texte d’une requête
  • Le type sqlprof_attr qui permet d’ajouter (via le paramètre profile), les hints de votre choix comme paramètres du SQL profile
  • La capacité que vous aurez de retrouver le texte d’une requête dans la shared_pool… ou à l’endroit de votre choix (AWR, Statspack, votre code)

Pour créer un SQL Profile, définissez les paramètres sql_id, profile_name, category, force_matching et hint et vous pourrez le voir utilisé dans la section « note » du plan d’exécution une fois celui-ci re-parsé.

Dans mon cas, nous avons fini par modifier le code du batch concerné avec l’aide des développeurs. Toutefois, nous avons gagné plusieurs heures en corrigeant le plan sur les environnements de tests avant de nous retourner vers une autre équipe. Je me suis dit que quelques-uns d’entre-vous qui n’ont pas encore eu la chance de croiser ces articles aimeraient y jeter un œil. Quelqu’un a dit intéressant ?

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *