{"id":159,"date":"2009-06-19T14:39:46","date_gmt":"2009-06-19T13:39:46","guid":{"rendered":"https:\/\/www.alldb.fr\/blogs\/?p=159"},"modified":"2023-04-20T07:04:41","modified_gmt":"2023-04-20T06:04:41","slug":"sybase-ase-planification-dans-adaptive-server","status":"publish","type":"post","link":"https:\/\/blog.capdata.fr\/index.php\/sybase-ase-planification-dans-adaptive-server\/","title":{"rendered":"Planification dans Adaptive Server"},"content":{"rendered":"<a class=\"synved-social-button synved-social-button-share synved-social-size-24 synved-social-resolution-single synved-social-provider-twitter nolightbox\" data-provider=\"twitter\" target=\"_blank\" rel=\"nofollow\" title=\"Share on Twitter\" href=\"https:\/\/twitter.com\/intent\/tweet?url=https%3A%2F%2Fblog.capdata.fr%2Findex.php%2Fwp-json%2Fwp%2Fv2%2Fposts%2F159&#038;text=Article%20sur%20le%20blog%20de%20la%20Capdata%20Tech%20Team%20%3A%20\" style=\"font-size: 0px;width:24px;height:24px;margin:0;margin-bottom:5px;margin-right:5px\"><img loading=\"lazy\" decoding=\"async\" alt=\"twitter\" title=\"Share on Twitter\" class=\"synved-share-image synved-social-image synved-social-image-share\" width=\"24\" height=\"24\" style=\"display: inline;width:24px;height:24px;margin: 0;padding: 0;border: none;box-shadow: none\" src=\"https:\/\/blog.capdata.fr\/wp-content\/plugins\/social-media-feather\/synved-social\/image\/social\/regular\/48x48\/twitter.png\" \/><\/a><a class=\"synved-social-button synved-social-button-share synved-social-size-24 synved-social-resolution-single synved-social-provider-linkedin nolightbox\" data-provider=\"linkedin\" target=\"_blank\" rel=\"nofollow\" title=\"Share on Linkedin\" href=\"https:\/\/www.linkedin.com\/shareArticle?mini=true&#038;url=https%3A%2F%2Fblog.capdata.fr%2Findex.php%2Fwp-json%2Fwp%2Fv2%2Fposts%2F159&#038;title=Planification%20dans%20Adaptive%20Server\" style=\"font-size: 0px;width:24px;height:24px;margin:0;margin-bottom:5px;margin-right:5px\"><img loading=\"lazy\" decoding=\"async\" alt=\"linkedin\" title=\"Share on Linkedin\" class=\"synved-share-image synved-social-image synved-social-image-share\" width=\"24\" height=\"24\" style=\"display: inline;width:24px;height:24px;margin: 0;padding: 0;border: none;box-shadow: none\" src=\"https:\/\/blog.capdata.fr\/wp-content\/plugins\/social-media-feather\/synved-social\/image\/social\/regular\/48x48\/linkedin.png\" \/><\/a><a class=\"synved-social-button synved-social-button-share synved-social-size-24 synved-social-resolution-single synved-social-provider-mail nolightbox\" data-provider=\"mail\" rel=\"nofollow\" title=\"Share by email\" href=\"mailto:?subject=Planification%20dans%20Adaptive%20Server&#038;body=Article%20sur%20le%20blog%20de%20la%20Capdata%20Tech%20Team%20%3A%20:%20https%3A%2F%2Fblog.capdata.fr%2Findex.php%2Fwp-json%2Fwp%2Fv2%2Fposts%2F159\" style=\"font-size: 0px;width:24px;height:24px;margin:0;margin-bottom:5px\"><img loading=\"lazy\" decoding=\"async\" alt=\"mail\" title=\"Share by email\" class=\"synved-share-image synved-social-image synved-social-image-share\" width=\"24\" height=\"24\" style=\"display: inline;width:24px;height:24px;margin: 0;padding: 0;border: none;box-shadow: none\" src=\"https:\/\/blog.capdata.fr\/wp-content\/plugins\/social-media-feather\/synved-social\/image\/social\/regular\/48x48\/mail.png\" \/><\/a><p>Un petit post sur la planification de t\u00e2ches sur Adaptive Server.<\/p>\n<p>Globalement, ASE utilise des threads pour supporter toutes les t\u00e2ches qu&#8217;il ex\u00e9cute: requ\u00eates, IO r\u00e9seau ou disque, connexions utilisateur, t\u00e2ches internes&#8230; en conjonction avec son propre planificateur de t\u00e2che.<\/p>\n<p>Le r\u00f4le du planificateur de t\u00e2che sur tout syst\u00e8me est de partager le temps d&#8217;un CPU entre plusieurs unit\u00e9s d&#8217;ex\u00e9cution (t\u00e2ches). Il existe deux grandes familles de planificateurs, les <strong>pr\u00e9emptifs<\/strong>, et les <strong>coop\u00e9ratifs<\/strong>.<\/p>\n<p>Le planificateur <strong>pr\u00e9emptif <\/strong>a le pouvoir de planifier et d&#8217;interrompre les t\u00e2ches selon des r\u00e8gles qui lui sont propres et sans tenir compte du type de t\u00e2che en cours d&#8217;ex\u00e9cution. <em>One size fits all<\/em>, comme on dit.  Ce m\u00e9canisme, qui garantit qu&#8217;aucune t\u00e2che ne va monopoliser les ressources CPU, permet \u00e0 chaque programme de pouvoir avoir la main sur la CPU \u00e0 un moment o\u00f9 un autre. Sur la plupart des OS (linux, UNIX System V et Windows NT \u00e0 partir de la 4.0), le planificateur alloue au thread un bail d&#8217;ex\u00e9cution ou un quanti\u00e8me. Si la t\u00e2che n&#8217;a pas termin\u00e9 son travail dans le temps imparti, elle est interrompue. Lorsqu&#8217;il interrompt la t\u00e2che en cours, le planificateur sauvegarde son contexte dans un coin (c&#8217;est \u00e0 dire les structures process + thread qui la repr\u00e9sentent en m\u00e9moire), et planifie une nouvelle t\u00e2che sur la CPU. Ce qu&#8217;on appelle un<em> changement de contexte<\/em>.<\/p>\n<p>Le planificateur <strong>coop\u00e9ratif<\/strong>, lui, va au contraire laisser \u00e0 la t\u00e2che le soin de se terminer toute seule. C&#8217;est l\u00e0 la plus grosse diff\u00e9rence, il n&#8217;interrompt pas une t\u00e2che qui n&#8217;a pas termin\u00e9 son travail.  C&#8217;est \u00e0 la charge de la t\u00e2che de rendre la main pour laisser de la place aux autres, c&#8217;est donc \u00e0 elle de pr\u00e9voir un m\u00e9canisme de rel\u00e2che (<em>to yield<\/em> = &#8220;c\u00e9der&#8221;). Windows 3.1 employait un scheduler coop\u00e9ratif, les Windows 98 et 95 aussi pour assurer la compatibilit\u00e9 avec les programmes 16 bits.<\/p>\n<p>Maintenant, on imagine facilement le risque d&#8217;employer un tel syst\u00e8me de planification: une t\u00e2che qui part en vrille ne lib\u00e8rera jamais la CPU, \u00e7a n&#8217;a donc plus \u00e9t\u00e9 employ\u00e9 pour faire des operating systems.<\/p>\n<p><a href=\"https:\/\/www.csail.mit.edu\/user\/1547\">Micheal Stonebraker<\/a> avait publi\u00e9 un article de quelques pages au d\u00e9but des ann\u00e9es 80* expliquant en gros que les &#8216;services&#8217; apport\u00e9s par UNIX system V n&#8217;\u00e9taient pas adapt\u00e9s au monde de la base de donn\u00e9es, et notamment en mati\u00e8re de planification. Les t\u00e2ches typiques issues des SGBD prennent plus de temps \u00e0 s&#8217;effectuer car il ne s&#8217;agit pas de calcul mais d&#8217;IOs, et le mode pr\u00e9emptif n&#8217;est pas adapt\u00e9 car il &#8216;coupe&#8217; la dynamique et l&#8217;efficacit\u00e9 du SGBD en produisant de nombreux changements de contexte.<\/p>\n<p>Donc les d\u00e9veloppeurs chez Sybase ont r\u00e9pondu en cr\u00e9ant un scheduler coop\u00e9ratif &#8216;<em>on top<\/em>&#8216; **, propre \u00e0 Adaptive Server et par dessus le planificateur de l&#8217;OS, de telle mani\u00e8re \u00e0 ce qu&#8217;il masque les choses vis \u00e0 vis de celui-ci et limite au maximum les changements de contexte.<\/p>\n<p><strong>&#8211; Les tranches de temps:<\/strong><br \/>\nASE va donc fonctionner comme un OS, mais avec ses r\u00e8gles \u00e0 lui: il g\u00e8re sa propre planification, son propre partage du temps CPU, ses propres valeurs de quanti\u00e8me. Car bien que coop\u00e9ratif, il doit pouvoir stopper une t\u00e2che qui ne r\u00e9pond plus et \u00e9viter la saturation d&#8217;un engine. Lorsqu&#8217;il planifie une t\u00e2che, il va lui allouer un bail. Ce bail n&#8217;est pas une valeur temporelle, c&#8217;est un nombre de ticks d&#8217;horloge qui est d\u00e9cr\u00e9ment\u00e9. Il est calcul\u00e9 en divisant le param\u00e8tre &#8216;timeslice&#8217; par &#8216;sql server clock tick length&#8217;. Comme les deux valeurs sont \u00e0 100 ms par d\u00e9faut, le nombre de ticks d&#8217;horloge autoris\u00e9 est de 1. Dans le d\u00e9roulement de son ex\u00e9cution, une t\u00e2che va passer par des parties de code qu&#8217;on appelle des <em>yield points<\/em>, au cours desquels elle va prendre une seconde pour v\u00e9rifier qu&#8217;elle n&#8217;a pas d\u00e9pass\u00e9 son bail. Si elle d\u00e9couvre que le bail est exc\u00e9d\u00e9 (bail &lt; 0), elle va demander \u00e0 ASE de lui accorder une grace suppl\u00e9mentaire (<em>cpu grace time<\/em>), qui peut aller jusqu&#8217;\u00e0  500 ticks (soit 50 secondes). Si elle n&#8217;a pas termin\u00e9 au del\u00e0 de cette valeur, alors ASE sort les gros moyens, termine la t\u00e2che, annule ses transactions et affiche une stacktrace dans l&#8217;errorlog:<\/p>\n<pre>00:00000:00005:2007\/04\/02 22:09:24.07 kernel  timeslice -501, current process infected\r\n00:00000:00005:2007\/04\/02 22:09:24.75 kernel  ************************************\r\n00:00000:00005:2007\/04\/02 22:09:24.77 kernel  curdb = 1 tempdb = 2 pstat = 0x200\r\n00:00000:00005:2007\/04\/02 22:09:24.77 kernel  lasterror = 0 preverror = 0 transtate = 1\r\n00:00000:00005:2007\/04\/02 22:09:24.77 kernel  curcmd = 0 program =\r\n...<\/pre>\n<p>Tout ceci se passe toujours sans que l&#8217;OS ne sache rien, car de son c\u00f4t\u00e9, le processus dataserver est toujours en ex\u00e9cution. C&#8217;est le but: l&#8217;OS ne doit pas interrompre le processus dataserver puisque celui-ci semble toujours travailler.<\/p>\n<p><strong>&#8211; Runnable Process search count:<\/strong><br \/>\nToujours dans le souci de pr\u00e9server son ex\u00e9cution vis \u00e0 vis de l&#8217;OS, lorsqu&#8217;il a termin\u00e9 d&#8217;ex\u00e9cuter des t\u00e2ches, et plut\u00f4t que de rendre la main tout de suite, Adaptive Server va entrer dans une boucle de v\u00e9rification des IOs en attente c\u00f4t\u00e9 r\u00e9seau puis c\u00f4t\u00e9 disque. S&#8217;il ne trouve rien, il va tourner (<em>spinning<\/em>) pour rechercher de nouvelles t\u00e2ches en attente d&#8217;ex\u00e9cution, puis de nouvelles IOs r\u00e9seau, puis de nouvelles IOs disques, etc&#8230; tout \u00e7a 2000 fois par d\u00e9faut (<em>runnable process search count<\/em>), m\u00eame s&#8217;il n&#8217;y a rien \u00e0 traiter dans aucune file d&#8217;attente. Ce qui donne une apparente sensation d&#8217;hyperactivit\u00e9 c\u00f4t\u00e9 OS, alors que c\u00f4t\u00e9 Adaptive Sever, l&#8217;\u00e9lectro-enc\u00e9phalo est plut\u00f4t plat.<\/p>\n<p>Pour illustrer tout \u00e7a, une petite explication de la section &#8216;kernel&#8217; de sp_sysmon:<\/p>\n<pre>Kernel Utilization\r\n------------------\r\n\r\nYour Runnable Process Search Count is set to 5000\r\nand I\/O Polling Process Count is set to 10\r\n\r\nEngine Busy Utilization        CPU Busy   I\/O Busy       Idle\r\n------------------------       --------   --------   --------\r\nEngine 0                       80.0 %      7.5 %     12.5 %\r\nEngine 1                       80.8 %      6.0 %     13.2 %\r\nEngine 2                       82.5 %      5.7 %     11.9 %\r\nEngine 3                       84.0 %      6.7 %      9.3 %\r\nEngine 4                       79.0 %      6.8 %     14.2 %\r\nEngine 5                       80.0 %      7.3 %     12.7 %\r\nEngine 6                       79.6 %      8.3 %     12.0 %\r\n------------------------       --------   --------   --------\r\nSummary           Total         565.9 %     48.4 %     85.7 %\r\nAverage                         80.8 %      6.9 %     12.2 %<\/pre>\n<p>Avant de commencer, il faut bien rappeler le cheminement de la boucle:<br \/>\n<a href=\"https:\/\/www.alldb.fr\/blog\/wp-content\/uploads\/2009\/06\/rpsc3.png\"><img loading=\"lazy\" decoding=\"async\" width=\"300\" height=\"140\" class=\"alignnone size-medium wp-image-178\" src=\"https:\/\/www.alldb.fr\/blog\/wp-content\/uploads\/2009\/06\/rpsc3-300x140.png\" alt=\"\" srcset=\"https:\/\/blog.capdata.fr\/wp-content\/uploads\/2009\/06\/rpsc3-300x140.png 300w, https:\/\/blog.capdata.fr\/wp-content\/uploads\/2009\/06\/rpsc3.png 986w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a><a href=\"https:\/\/www.alldb.fr\/blogs\/wp-content\/uploads\/2009\/06\/rpsc2.png\"><br \/>\n<\/a><\/p>\n<p>Chaque engine tient le compte de ticks re\u00e7us de l&#8217;OS (par le biais de signaux SIGALRM) tous les 100ms, et les r\u00e9pertorie   selon trois cat\u00e9gories:<\/p>\n<p><strong>CPU Busy<\/strong>: repr\u00e9sente le temps (en fait le nombre de ticks ramen\u00e9 en pourcentage) pass\u00e9 par l&#8217;engine \u00e0 ex\u00e9cuter une t\u00e2che sur l&#8217;intervalle.<br \/>\n<strong>Idle<\/strong>: repr\u00e9sente le temps pass\u00e9 par l&#8217;engine \u00e0 n&#8217;ex\u00e9cuter aucune t\u00e2che sur l&#8217;intervalle.<br \/>\n<strong> I\/O Busy<\/strong>: est une soustraction de Idle. Il s&#8217;agit du temps pass\u00e9 par l&#8217;engine \u00e0 n&#8217;ex\u00e9cuter aucune t\u00e2che (donc Idle) mais o\u00f9 il y avait au moins une IO disque en attente dans la file. Elle repr\u00e9sente donc la quantit\u00e9 de temps o\u00f9 l&#8217;engine n&#8217;a pas pu ex\u00e9cuter une t\u00e2che parce qu&#8217;il y avait au moins une IO disque en attente.<\/p>\n<p>On peut retrouver ces valeurs brutes en interrogeant les variables globales @@cpu_busy, @@idle, et @@io_busy. La dur\u00e9e d&#8217;un tick peut \u00eatre retrouv\u00e9e avec @@timeticks.<\/p>\n<p>A+. [ David B. ]<\/p>\n<p><em>*: Michael Stonebraker, Operating System Support for Database Management, CACM 24(7), p412-418 (1981).<br \/>\n**: et Microsoft fit de m\u00eame <\/em><em>en dotant <\/em><em>SQL Server 7.0  de son propre scheduler coop\u00e9ratif (UMS), toujours bien pr\u00e9sent en version 2008 sous une autre d\u00e9nomination (SQLOS). <\/em><\/p>\n<p> <script type=\"text\/javascript\" src=\"https:\/\/tcr.tynt.com\/javascripts\/Tracer.js?user=d4FlbGI04r35lZadbi-bpO\"><\/script><\/p>\n<a class=\"synved-social-button synved-social-button-share synved-social-size-24 synved-social-resolution-single synved-social-provider-twitter nolightbox\" data-provider=\"twitter\" target=\"_blank\" rel=\"nofollow\" title=\"Share on Twitter\" href=\"https:\/\/twitter.com\/intent\/tweet?url=https%3A%2F%2Fblog.capdata.fr%2Findex.php%2Fwp-json%2Fwp%2Fv2%2Fposts%2F159&#038;text=Article%20sur%20le%20blog%20de%20la%20Capdata%20Tech%20Team%20%3A%20\" style=\"font-size: 0px;width:24px;height:24px;margin:0;margin-bottom:5px;margin-right:5px\"><img loading=\"lazy\" decoding=\"async\" alt=\"twitter\" title=\"Share on Twitter\" class=\"synved-share-image synved-social-image synved-social-image-share\" width=\"24\" height=\"24\" style=\"display: inline;width:24px;height:24px;margin: 0;padding: 0;border: none;box-shadow: none\" src=\"https:\/\/blog.capdata.fr\/wp-content\/plugins\/social-media-feather\/synved-social\/image\/social\/regular\/48x48\/twitter.png\" \/><\/a><a class=\"synved-social-button synved-social-button-share synved-social-size-24 synved-social-resolution-single synved-social-provider-linkedin nolightbox\" data-provider=\"linkedin\" target=\"_blank\" rel=\"nofollow\" title=\"Share on Linkedin\" href=\"https:\/\/www.linkedin.com\/shareArticle?mini=true&#038;url=https%3A%2F%2Fblog.capdata.fr%2Findex.php%2Fwp-json%2Fwp%2Fv2%2Fposts%2F159&#038;title=Planification%20dans%20Adaptive%20Server\" style=\"font-size: 0px;width:24px;height:24px;margin:0;margin-bottom:5px;margin-right:5px\"><img loading=\"lazy\" decoding=\"async\" alt=\"linkedin\" title=\"Share on Linkedin\" class=\"synved-share-image synved-social-image synved-social-image-share\" width=\"24\" height=\"24\" style=\"display: inline;width:24px;height:24px;margin: 0;padding: 0;border: none;box-shadow: none\" src=\"https:\/\/blog.capdata.fr\/wp-content\/plugins\/social-media-feather\/synved-social\/image\/social\/regular\/48x48\/linkedin.png\" \/><\/a><a class=\"synved-social-button synved-social-button-share synved-social-size-24 synved-social-resolution-single synved-social-provider-mail nolightbox\" data-provider=\"mail\" rel=\"nofollow\" title=\"Share by email\" href=\"mailto:?subject=Planification%20dans%20Adaptive%20Server&#038;body=Article%20sur%20le%20blog%20de%20la%20Capdata%20Tech%20Team%20%3A%20:%20https%3A%2F%2Fblog.capdata.fr%2Findex.php%2Fwp-json%2Fwp%2Fv2%2Fposts%2F159\" style=\"font-size: 0px;width:24px;height:24px;margin:0;margin-bottom:5px\"><img loading=\"lazy\" decoding=\"async\" alt=\"mail\" title=\"Share by email\" class=\"synved-share-image synved-social-image synved-social-image-share\" width=\"24\" height=\"24\" style=\"display: inline;width:24px;height:24px;margin: 0;padding: 0;border: none;box-shadow: none\" src=\"https:\/\/blog.capdata.fr\/wp-content\/plugins\/social-media-feather\/synved-social\/image\/social\/regular\/48x48\/mail.png\" \/><\/a>","protected":false},"excerpt":{"rendered":"<p>Un petit post sur la planification de t\u00e2ches sur Adaptive Server. Globalement, ASE utilise des threads pour supporter toutes les t\u00e2ches qu&#8217;il ex\u00e9cute: requ\u00eates, IO r\u00e9seau ou disque, connexions utilisateur, t\u00e2ches internes&#8230; en conjonction avec son propre planificateur de t\u00e2che.&hellip; <a href=\"https:\/\/blog.capdata.fr\/index.php\/sybase-ase-planification-dans-adaptive-server\/\" class=\"more-link\">Continuer la lecture <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":2,"featured_media":7872,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[6,450],"tags":[38,37],"class_list":["post-159","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-sybase","category-vintage","tag-internals","tag-scheduling"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v20.8 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Planification dans Adaptive Server - Capdata TECH BLOG<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/blog.capdata.fr\/index.php\/sybase-ase-planification-dans-adaptive-server\/\" \/>\n<meta property=\"og:locale\" content=\"fr_FR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Planification dans Adaptive Server - Capdata TECH BLOG\" \/>\n<meta property=\"og:description\" content=\"Un petit post sur la planification de t\u00e2ches sur Adaptive Server. Globalement, ASE utilise des threads pour supporter toutes les t\u00e2ches qu&#8217;il ex\u00e9cute: requ\u00eates, IO r\u00e9seau ou disque, connexions utilisateur, t\u00e2ches internes&#8230; en conjonction avec son propre planificateur de t\u00e2che.&hellip; Continuer la lecture &rarr;\" \/>\n<meta property=\"og:url\" content=\"https:\/\/blog.capdata.fr\/index.php\/sybase-ase-planification-dans-adaptive-server\/\" \/>\n<meta property=\"og:site_name\" content=\"Capdata TECH BLOG\" \/>\n<meta property=\"article:published_time\" content=\"2009-06-19T13:39:46+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2023-04-20T06:04:41+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/blog.capdata.fr\/wp-content\/uploads\/2013\/02\/ribo.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"188\" \/>\n\t<meta property=\"og:image:height\" content=\"268\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"David Baffaleuf\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"\u00c9crit par\" \/>\n\t<meta name=\"twitter:data1\" content=\"David Baffaleuf\" \/>\n\t<meta name=\"twitter:label2\" content=\"Dur\u00e9e de lecture estim\u00e9e\" \/>\n\t<meta name=\"twitter:data2\" content=\"7 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/blog.capdata.fr\/index.php\/sybase-ase-planification-dans-adaptive-server\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/blog.capdata.fr\/index.php\/sybase-ase-planification-dans-adaptive-server\/\"},\"author\":{\"name\":\"David Baffaleuf\",\"@id\":\"https:\/\/blog.capdata.fr\/#\/schema\/person\/136297da9f61d6e4878abe0f48bc5fbf\"},\"headline\":\"Planification dans Adaptive Server\",\"datePublished\":\"2009-06-19T13:39:46+00:00\",\"dateModified\":\"2023-04-20T06:04:41+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/blog.capdata.fr\/index.php\/sybase-ase-planification-dans-adaptive-server\/\"},\"wordCount\":1148,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/blog.capdata.fr\/#organization\"},\"keywords\":[\"internals\",\"scheduling\"],\"articleSection\":[\"Sybase\",\"Vintage\"],\"inLanguage\":\"fr-FR\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/blog.capdata.fr\/index.php\/sybase-ase-planification-dans-adaptive-server\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/blog.capdata.fr\/index.php\/sybase-ase-planification-dans-adaptive-server\/\",\"url\":\"https:\/\/blog.capdata.fr\/index.php\/sybase-ase-planification-dans-adaptive-server\/\",\"name\":\"Planification dans Adaptive Server - Capdata TECH BLOG\",\"isPartOf\":{\"@id\":\"https:\/\/blog.capdata.fr\/#website\"},\"datePublished\":\"2009-06-19T13:39:46+00:00\",\"dateModified\":\"2023-04-20T06:04:41+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/blog.capdata.fr\/index.php\/sybase-ase-planification-dans-adaptive-server\/#breadcrumb\"},\"inLanguage\":\"fr-FR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/blog.capdata.fr\/index.php\/sybase-ase-planification-dans-adaptive-server\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/blog.capdata.fr\/index.php\/sybase-ase-planification-dans-adaptive-server\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Accueil\",\"item\":\"https:\/\/blog.capdata.fr\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Planification dans Adaptive Server\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/blog.capdata.fr\/#website\",\"url\":\"https:\/\/blog.capdata.fr\/\",\"name\":\"Capdata TECH BLOG\",\"description\":\"Le blog technique sur les bases de donn\u00e9es de CAP DATA Consulting\",\"publisher\":{\"@id\":\"https:\/\/blog.capdata.fr\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/blog.capdata.fr\/?s={search_term_string}\"},\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"fr-FR\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/blog.capdata.fr\/#organization\",\"name\":\"Capdata TECH BLOG\",\"url\":\"https:\/\/blog.capdata.fr\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"fr-FR\",\"@id\":\"https:\/\/blog.capdata.fr\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/blog.capdata.fr\/wp-content\/uploads\/2023\/01\/logo_capdata.webp\",\"contentUrl\":\"https:\/\/blog.capdata.fr\/wp-content\/uploads\/2023\/01\/logo_capdata.webp\",\"width\":800,\"height\":254,\"caption\":\"Capdata TECH BLOG\"},\"image\":{\"@id\":\"https:\/\/blog.capdata.fr\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.linkedin.com\/company\/cap-data-consulting\/mycompany\/\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/blog.capdata.fr\/#\/schema\/person\/136297da9f61d6e4878abe0f48bc5fbf\",\"name\":\"David Baffaleuf\",\"sameAs\":[\"http:\/\/www.capdata.fr\"],\"url\":\"https:\/\/blog.capdata.fr\/index.php\/author\/dbaffaleuf\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Planification dans Adaptive Server - Capdata TECH BLOG","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/blog.capdata.fr\/index.php\/sybase-ase-planification-dans-adaptive-server\/","og_locale":"fr_FR","og_type":"article","og_title":"Planification dans Adaptive Server - Capdata TECH BLOG","og_description":"Un petit post sur la planification de t\u00e2ches sur Adaptive Server. Globalement, ASE utilise des threads pour supporter toutes les t\u00e2ches qu&#8217;il ex\u00e9cute: requ\u00eates, IO r\u00e9seau ou disque, connexions utilisateur, t\u00e2ches internes&#8230; en conjonction avec son propre planificateur de t\u00e2che.&hellip; Continuer la lecture &rarr;","og_url":"https:\/\/blog.capdata.fr\/index.php\/sybase-ase-planification-dans-adaptive-server\/","og_site_name":"Capdata TECH BLOG","article_published_time":"2009-06-19T13:39:46+00:00","article_modified_time":"2023-04-20T06:04:41+00:00","og_image":[{"width":188,"height":268,"url":"https:\/\/blog.capdata.fr\/wp-content\/uploads\/2013\/02\/ribo.jpg","type":"image\/jpeg"}],"author":"David Baffaleuf","twitter_card":"summary_large_image","twitter_misc":{"\u00c9crit par":"David Baffaleuf","Dur\u00e9e de lecture estim\u00e9e":"7 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/blog.capdata.fr\/index.php\/sybase-ase-planification-dans-adaptive-server\/#article","isPartOf":{"@id":"https:\/\/blog.capdata.fr\/index.php\/sybase-ase-planification-dans-adaptive-server\/"},"author":{"name":"David Baffaleuf","@id":"https:\/\/blog.capdata.fr\/#\/schema\/person\/136297da9f61d6e4878abe0f48bc5fbf"},"headline":"Planification dans Adaptive Server","datePublished":"2009-06-19T13:39:46+00:00","dateModified":"2023-04-20T06:04:41+00:00","mainEntityOfPage":{"@id":"https:\/\/blog.capdata.fr\/index.php\/sybase-ase-planification-dans-adaptive-server\/"},"wordCount":1148,"commentCount":0,"publisher":{"@id":"https:\/\/blog.capdata.fr\/#organization"},"keywords":["internals","scheduling"],"articleSection":["Sybase","Vintage"],"inLanguage":"fr-FR","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/blog.capdata.fr\/index.php\/sybase-ase-planification-dans-adaptive-server\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/blog.capdata.fr\/index.php\/sybase-ase-planification-dans-adaptive-server\/","url":"https:\/\/blog.capdata.fr\/index.php\/sybase-ase-planification-dans-adaptive-server\/","name":"Planification dans Adaptive Server - Capdata TECH BLOG","isPartOf":{"@id":"https:\/\/blog.capdata.fr\/#website"},"datePublished":"2009-06-19T13:39:46+00:00","dateModified":"2023-04-20T06:04:41+00:00","breadcrumb":{"@id":"https:\/\/blog.capdata.fr\/index.php\/sybase-ase-planification-dans-adaptive-server\/#breadcrumb"},"inLanguage":"fr-FR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/blog.capdata.fr\/index.php\/sybase-ase-planification-dans-adaptive-server\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/blog.capdata.fr\/index.php\/sybase-ase-planification-dans-adaptive-server\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Accueil","item":"https:\/\/blog.capdata.fr\/"},{"@type":"ListItem","position":2,"name":"Planification dans Adaptive Server"}]},{"@type":"WebSite","@id":"https:\/\/blog.capdata.fr\/#website","url":"https:\/\/blog.capdata.fr\/","name":"Capdata TECH BLOG","description":"Le blog technique sur les bases de donn\u00e9es de CAP DATA Consulting","publisher":{"@id":"https:\/\/blog.capdata.fr\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/blog.capdata.fr\/?s={search_term_string}"},"query-input":"required name=search_term_string"}],"inLanguage":"fr-FR"},{"@type":"Organization","@id":"https:\/\/blog.capdata.fr\/#organization","name":"Capdata TECH BLOG","url":"https:\/\/blog.capdata.fr\/","logo":{"@type":"ImageObject","inLanguage":"fr-FR","@id":"https:\/\/blog.capdata.fr\/#\/schema\/logo\/image\/","url":"https:\/\/blog.capdata.fr\/wp-content\/uploads\/2023\/01\/logo_capdata.webp","contentUrl":"https:\/\/blog.capdata.fr\/wp-content\/uploads\/2023\/01\/logo_capdata.webp","width":800,"height":254,"caption":"Capdata TECH BLOG"},"image":{"@id":"https:\/\/blog.capdata.fr\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.linkedin.com\/company\/cap-data-consulting\/mycompany\/"]},{"@type":"Person","@id":"https:\/\/blog.capdata.fr\/#\/schema\/person\/136297da9f61d6e4878abe0f48bc5fbf","name":"David Baffaleuf","sameAs":["http:\/\/www.capdata.fr"],"url":"https:\/\/blog.capdata.fr\/index.php\/author\/dbaffaleuf\/"}]}},"_links":{"self":[{"href":"https:\/\/blog.capdata.fr\/index.php\/wp-json\/wp\/v2\/posts\/159","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blog.capdata.fr\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.capdata.fr\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.capdata.fr\/index.php\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.capdata.fr\/index.php\/wp-json\/wp\/v2\/comments?post=159"}],"version-history":[{"count":30,"href":"https:\/\/blog.capdata.fr\/index.php\/wp-json\/wp\/v2\/posts\/159\/revisions"}],"predecessor-version":[{"id":9596,"href":"https:\/\/blog.capdata.fr\/index.php\/wp-json\/wp\/v2\/posts\/159\/revisions\/9596"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/blog.capdata.fr\/index.php\/wp-json\/wp\/v2\/media\/7872"}],"wp:attachment":[{"href":"https:\/\/blog.capdata.fr\/index.php\/wp-json\/wp\/v2\/media?parent=159"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.capdata.fr\/index.php\/wp-json\/wp\/v2\/categories?post=159"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.capdata.fr\/index.php\/wp-json\/wp\/v2\/tags?post=159"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}