Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1587 connectés 

 


 Mot :   Pseudo :  
 
 Page :   1  2
Page Suivante
Auteur Sujet :

Tentative de mini-bench comparant MySQL et SQL Server

n°1164189
matthieu_p​hpmv
Posté le 29-07-2005 à 01:16:00  profilanswer
 

Reprise du message précédent :
Je ne souhaite pas troller (loin de moi cette idée), mais qu'est ce que c'est moche le VBscript!!! hallucinant.
Tu sais arjuna ya un driver sql server pour php ;)

mood
Publicité
Posté le 29-07-2005 à 01:16:00  profilanswer
 

n°1164194
Arjuna
Aircraft Ident.: F-MBSD
Posté le 29-07-2005 à 01:29:33  profilanswer
 

hors de question de faire en PHP, ça changera rien du tout.
à la limite, si t'en as envie, tu peux réécrire les deux progs en C, C++ ou C# (dans un élan d'humanité, j'accepte même du Java), mais hors de question de faire en PHP, ou alors je le fait en VB (et ce sera de toute façon mieu que du PHP :p)

n°1168244
Arjuna
Aircraft Ident.: F-MBSD
Posté le 02-08-2005 à 19:38:28  profilanswer
 

Bon, j'ai pas oublié le bench, mais j'ai eu un we de folie, et hier soir aussi et... ce soir je risque de faire encore une soirée à la con, donc je n'ai pas trop la tête à bosser sur le bench ce soir... (surtout que c'est plutôt complexe comme truc).
 
Je continuerai vraissemblement demain soir.

n°1168291
Arjuna
Aircraft Ident.: F-MBSD
Posté le 02-08-2005 à 20:23:30  profilanswer
 

Bon, finalement, à priori, je vais passer une soirée tranquille...
 
J'en profite pour avancer :D
 
J'ai une question...
 
J'ai les notions suivantes :
- Un même dépôt peut s'approvisionner pour un même produit chez N fournisseurs
- Chaque fournisseur vend un même produit à des prix différents
- Chaque fournisseur propose un délais différent de réapprovisionnement
- Pour le moment, mais je vais le rajouter, chaque fournisseur propose une quantité "garantie" de livraison par mois par produit : passé cette quantité, je dois traîter le fournisseur comme ne pouvant plus fournir le produit jusqu'à la fin du mois.
 
Quelqu'un serait-il capable de me poster un petit algo prenant en compte chacun de ces paramètres ?
Actuellement, dans ma requête de réappro, je sélectionne bêtement le plus rapide des fournisseurs, mais c'est pas forcément une affaire !

n°1168309
Arjuna
Aircraft Ident.: F-MBSD
Posté le 02-08-2005 à 20:55:09  profilanswer
 

t'ain, je viens de trouver un algo, mais alors là, il faut réussir à le traduire, j'en ai déjà mal à la tête :D
 
prendre le min(price) parmi les fournisseurs pouvant livrer la quantité désirée dans un délais inférieur à la date plus ancienne commande en relicat + x jours OU le min(delais) des fournisseurs pouvant livrer la quantité désirée si aucun founisseur ne peut livrer dans le délais désiré.
 
pfiou ! :D

n°1168311
Arjuna
Aircraft Ident.: F-MBSD
Posté le 02-08-2005 à 20:55:48  profilanswer
 

avec X une constante correspondant au délais garanti de livraison au client

n°1168312
sircam
I Like Trains
Posté le 02-08-2005 à 20:56:19  profilanswer
 

Arjuna, pour ce famaux bench, est-il vraiment nécessaire de tenter de reproduire un environnement réel ?
 
Je sais que ça fait plus joli et que ça donne une impression de réalisme, mais une table, c'est une table.
 
[:pingouino]
 
Pas frapper.


---------------
Now Playing: {SYNTAX ERROR AT LINE 1210}
n°1168325
Arjuna
Aircraft Ident.: F-MBSD
Posté le 02-08-2005 à 21:25:19  profilanswer
 

Ca c'est de la requête ! :sol:
 

Code :
  1. select
  2. (
  3. select top 1 supplier_id
  4. from suppliement su
  5. where su.warehouse_id = st.warehouse_id
  6. and su.product_id = el.product_id
  7. and price = (
  8.  select min(price)
  9.  from suppliement su2
  10.  where su2.warehouse_id = su.warehouse_id
  11.  and su2.product_id = su.product_id
  12.  and su2.delay <= (
  13.   select min(e.date_event)
  14.   from
  15.    city c,
  16.    address a,
  17.    users u,
  18.    event_line el,
  19.    event e
  20.   where e.type = 'ORD'
  21.   and e.status = 'V'
  22.   and el.event_id = e.id
  23.   and el.status != 'R'
  24.   and el.product_id = su2.product_id
  25.   and u.id = e.user_id
  26.   and a.user_id = u.id
  27.   and a.type = 'LIV'
  28.   and c.id = a.city
  29.   and c.warehouse_id = su2.warehouse_id) + 10
  30.  and su2.max_supply >= (-1 * (st.stock - (sum(el.quantity) + st.reserved) + isNull((
  31.   select sum(el2.quantity)
  32.   from event_line el2, event e2
  33.   where e2.type = 'PUR'
  34.   and e2.status = 'V'
  35.   and e2.warehouse_id = st.warehouse_id
  36.   and el2.event_id = e2.id
  37.   and el2.product_id = el.product_id), 0)) - st.qtysupply)
  38. )
  39. and su.max_supply >= (-1 * (st.stock - (sum(el.quantity) + st.reserved) + isNull((
  40.  select sum(el2.quantity)
  41.  from event_line el2, event e2
  42.  where e2.type = 'PUR'
  43.  and e2.status = 'V'
  44.  and e2.warehouse_id = st.warehouse_id
  45.  and el2.event_id = e2.id
  46.  and el2.product_id = el.product_id), 0)) - st.qtysupply)
  47. union
  48. select top 1 supplier_id
  49. from suppliement su
  50. where su.warehouse_id = st.warehouse_id
  51. and su.product_id = el.product_id
  52. and delay = (
  53.  select min(delay)
  54.  from suppliement su2
  55.  where su2.warehouse_id = su.warehouse_id
  56.  and su2.product_id = su.product_id
  57.  and su2.delay > (
  58.   select min(e.date_event)
  59.   from
  60.    city c,
  61.    address a,
  62.    users u,
  63.    event_line el,
  64.    event e
  65.   where e.type = 'ORD'
  66.   and e.status = 'V'
  67.   and el.event_id = e.id
  68.   and el.status != 'R'
  69.   and el.product_id = su2.product_id
  70.   and u.id = e.user_id
  71.   and a.user_id = u.id
  72.   and a.type = 'LIV'
  73.   and c.id = a.city
  74.   and c.warehouse_id = su2.warehouse_id) + 10
  75.  and su2.max_supply >= (-1 * (st.stock - (sum(el.quantity) + st.reserved) + isNull((
  76.   select sum(el2.quantity)
  77.   from event_line el2, event e2
  78.   where e2.type = 'PUR'
  79.   and e2.status = 'V'
  80.   and e2.warehouse_id = st.warehouse_id
  81.   and el2.event_id = e2.id
  82.   and el2.product_id = el.product_id), 0)) - st.qtysupply)
  83.  and not exists (
  84.   select null
  85.   from suppliement su3
  86.   where su3.warehouse_id = su2.warehouse_id
  87.   and su3.product_id = su2.warehouse_id
  88.   and su3.delay <= (
  89.   select min(e.date_event)
  90.   from
  91.    city c,
  92.    address a,
  93.    users u,
  94.    event_line el,
  95.    event e
  96.   where e.type = 'ORD'
  97.   and e.status = 'V'
  98.   and el.event_id = e.id
  99.   and el.status != 'R'
  100.   and el.product_id = su3.product_id
  101.   and u.id = e.user_id
  102.   and a.user_id = u.id
  103.   and a.type = 'LIV'
  104.   and c.id = a.city
  105.   and c.warehouse_id = su3.warehouse_id) + 10
  106.  )
  107. )
  108. and su.max_supply >= (-1 * (st.stock - (sum(el.quantity) + st.reserved) + isNull((
  109.  select sum(el2.quantity)
  110.  from event_line el2, event e2
  111.  where e2.type = 'PUR'
  112.  and e2.status = 'V'
  113.  and e2.warehouse_id = st.warehouse_id
  114.  and el2.event_id = e2.id
  115.  and el2.product_id = el.product_id), 0)) - st.qtysupply)
  116. ) supplier_id,
  117. /*
  118. (select su.supplier_id
  119.  from suppliement su
  120.  where su.product_id = el.product_id
  121.  and su.warehouse_id = st.warehouse_id
  122.  and (su.delay = (
  123.   select min(su2.delay)
  124.   from suppliement su2  
  125.   where su2.product_id = su.product_id  
  126.   and su2.warehouse_id = su.warehouse_id
  127.   and su2.max_supply >= (-1 * (st.stock - (sum(el.quantity) + st.reserved) + isNull((
  128.    select sum(el2.quantity)  
  129.    from event_line el2, event e2  
  130.    where e2.type = 'PUR'  
  131.    and e2.status = 'V'  
  132.    and e2.warehouse_id = st.warehouse_id  
  133.    and el2.event_id = e2.id  
  134.    and el2.product_id = el.product_id), 0)) - st.qtysupply))
  135.  or 1 = 1)
  136. ) supplier_id,
  137. */
  138. st.warehouse_id,
  139. el.product_id,
  140. -1 * (st.stock - (sum(el.quantity) + st.reserved) + isNull((
  141.  select sum(el2.quantity)
  142.  from event_line el2, event e2
  143.  where e2.type = 'PUR'
  144.  and e2.status = 'V'
  145.  and e2.warehouse_id = st.warehouse_id
  146.  and el2.event_id = e2.id
  147.  and el2.product_id = el.product_id), 0)) - st.qtysupply quantityPurchase
  148. from
  149. stock st,
  150. country co,
  151. city ci,
  152. address a,
  153. users u,
  154. event_line el,
  155. event e
  156. where e.status = 'V'
  157. and el.event_id = e.id
  158. and u.id = e.user_id
  159. and a.user_id = u.id
  160. and a.type = 'LIV'
  161. and ci.id = a.city
  162. and st.warehouse_id = ci.warehouse_id
  163. and st.product_id = el.product_id
  164. group by
  165. st.warehouse_id,
  166. el.product_id,
  167. st.reserved,
  168. st.stock,
  169. st.qtysupply
  170. having -1 * (st.stock - (sum(el.quantity) + st.reserved) + isNull((select sum(el2.quantity) from event_line el2, event e2 where e2.type = 'PUR' and e2.status = 'V' and e2.warehouse_id = st.warehouse_id and el2.event_id = e2.id and el2.product_id = el.product_id), 0)) - st.qtysupply > 0
  171. order by supplier_id,
  172. st.warehouse_id


 
Même pas peur :ange:

n°1168329
Arjuna
Aircraft Ident.: F-MBSD
Posté le 02-08-2005 à 21:31:44  profilanswer
 

sircam a écrit :

Arjuna, pour ce famaux bench, est-il vraiment nécessaire de tenter de reproduire un environnement réel ?
 
Je sais que ça fait plus joli et que ça donne une impression de réalisme, mais une table, c'est une table.
 
[:pingouino]
 
Pas frapper.


Le problème, c'est pas trop la structure de la table ou les données.
 
Le problème, c'est la requête que je viens de pondre à l'instant : si t'es pas en environnement "réel", c'est à dire que tu cherches à répondre à une problématique, en aucun cas tu peux sortir ce genre de requêtes.
 
Après, je suis d'accord, je doute que les ERP s'amusent à faire tout en une seule passe comme je le fais ici (je contrôle l'état des stocks par rapport aux commandes du jour, et je retourne la quantité de produits à commander ainsi que le fournisseur auprès duquel passer la commande, le tout en une seule requête), mais ça représente tout de même le type de traîtements qu'on fait en temps normal dans une base de ce type.
 
Hors, pour comparer MySQL et SQL Server, je pars du principe que le domaine de prédilection de MySQL (environnement avec pas mal de données, modèle et requêtes simple) ne représente pas du tout la cible de MySQL auprès de laquelle les détracteurs de MySQL tente de faire croire qu'il est aussi bon qu'Oracle et SQL Server.
 
C'est pour cette raison que je préfère tester MySQL dans les conditions d'utilisation de SQL Server plutôt que l'inverse, surtout qu'on sait déjà tous que d'un point de vue rapidité sur des traîtements simples, MySQL est bien plus rapide (hormis sur le cas spécifique sur lequel je suis tombé l'autre jours avec la première version du bench)

n°1168339
Arjuna
Aircraft Ident.: F-MBSD
Posté le 02-08-2005 à 22:07:00  profilanswer
 

Bon...
 
Ca m'a l'air bon, je sais plus ce que j'ai oublié :D
 
Allez, zou, je lance le bench histoire de voir déjà au bout de combien de lignes ça plante :D

mood
Publicité
Posté le 02-08-2005 à 22:07:00  profilanswer
 

n°1168362
Arjuna
Aircraft Ident.: F-MBSD
Posté le 02-08-2005 à 22:41:49  profilanswer
 

soit j'ai buggé, soit SQL Server n'aime pas du tout mes requêtes :D
 
Mais là, les 2 Go de mémoire de mon serveur sont à block, et les deux CPU alternent entre des périodes de 80% de charge et 2% de charge. Les disques dur sont tout affolés, et je me demande ce qu'il fait, y'a rien qui change dans la base depuis tout à l'heure :D

n°1168368
sircam
I Like Trains
Posté le 02-08-2005 à 23:04:06  profilanswer
 

Là où tu risques malgré tout d'introduire un biais, c'est que pour réaliste que soit ton test case, ça reste un test case, carricature grossière de la réalité.
 
In fine, on pourrait dire que le bench n'est pas forcément plus fidèle ou réaliste qu'avec des tables A, B, C et D.
 
C'est juste pour t'épargner du boulot avant le plat de consistence; simple suggestion que tu ne suivras de tte façon pas.
 
[:pingouino]


---------------
Now Playing: {SYNTAX ERROR AT LINE 1210}
n°1168375
Arjuna
Aircraft Ident.: F-MBSD
Posté le 02-08-2005 à 23:22:01  profilanswer
 

seule différence, c'est que mon test case ne se veut pas simplement "réaliste", il est tout simplement basé sur une application réellement fonctionnelle, avec des règles réelles.
 
ce que tu ne veux pas comprendre, c'est que le nom des tables ou l'agencement des requêtes les unes derrière les autre ne change en rien le test. ce qui change, c'est d'avoir non pas un pauvre "left outer join" en se disant "y'en a plein dans les applications", mais de véritables requêtes complexes qui ne se contentent pas d'élargir les parties annales des mouches juste pour se donner l'impression d'être complexes.


Message édité par Arjuna le 02-08-2005 à 23:22:34
n°1168378
Arjuna
Aircraft Ident.: F-MBSD
Posté le 02-08-2005 à 23:24:27  profilanswer
 

quand SAP publie des résultats de bench à partir de leur produit, je les prend comme argent comptant, simplement parcequ'ils représente une utilisation en environnement "réel". là, j'ai pas SAP, qui n'est de toute façon pas compatible avec MySQL, alors je fais avec les moyens du bord, mais je tiens à m'approcher de ces conditions.

n°1168409
Arjuna
Aircraft Ident.: F-MBSD
Posté le 03-08-2005 à 00:18:45  profilanswer
 

Bon, mise à part un bug dans mon code quelque part, le bench marche (il ne produit plus d'erreur, par contre je me retrouve avec plus de commandes de réapprovisionnement que de commandes de vente, ce qui me semble relativement anormal :D)
 
J'ai encore un petit truc à modifier histoire de complexifier le process des claims, et ça devrait le faire.

n°1168415
drasche
Posté le 03-08-2005 à 00:51:24  profilanswer
 

J'ai deux remarques par rapport à ton bench:
1/ MySQL tourne en mode "émulé" sous Windows (CygWin powah)
2/ Idéalement, tu devrais avoir un serveur dédié pour héberger les bases de données, afin de s'assurer qu'il ne fait que ça.


---------------
Whichever format the fan may want to listen is fine with us – vinyl, wax cylinders, shellac, 8-track, iPod, cloud storage, cranial implants – just as long as it’s loud and rockin' (Billy Gibbons, ZZ Top)
n°1168416
Arjuna
Aircraft Ident.: F-MBSD
Posté le 03-08-2005 à 01:00:21  profilanswer
 

C'est le cas. Actuellement, je fais le bench sur le serveur parceque c'est plus pratique. Mais pour le lancement final, il se fera via le réseau.
 
Sinon, MySQL est peut-être en mode émulé sous Windows, mais :
1/ J'ai pas de linux sous la main
2/ Et même si j'en avais, il est hors de question de reformater mon serveur juste pour ça
3/ Mode émulé ou non, MySQL est censé être plus rapide que SQL Server même sous Windows
4/ Si t'as envie de faire tourner le bench chez toi, y'a pas de problème, j'ai déjà posté les sources, que je mets à jour au fur et à mesure de l'évolution du programme

n°1168420
Arjuna
Aircraft Ident.: F-MBSD
Posté le 03-08-2005 à 01:12:33  profilanswer
 

Mise à jour du topic avec les sources nouvelles du bench, à priori, il n'y a plus de bugs, et j'ai enfin une gestion de la réappro réaliste.
 
Test avec SQL Server avec les pramètres :
10 jours
10 commandes par jour
10 produits par commande
 

Code :
  1. Start on 8/3/2005 12:55:46 AM
  2. Start day 1 8/3/2005 12:55:46 AM
  3. Start process claims 8/3/2005 12:55:46 AM
  4. End process claims 8/3/2005 12:55:47 AM
  5. Start make orders 8/3/2005 12:55:47 AM
  6. End make orders 8/3/2005 12:55:59 AM
  7. Start control stock 8/3/2005 12:55:59 AM
  8. End control stock 8/3/2005 12:56:02 AM
  9. Start recieve stock 8/3/2005 12:56:02 AM
  10. End recieve stock 8/3/2005 12:56:02 AM
  11. Start reserve stock 8/3/2005 12:56:02 AM
  12. End reserve stock 8/3/2005 12:56:03 AM
  13. Start close orders 8/3/2005 12:56:03 AM
  14. End close orders 8/3/2005 12:56:03 AM
  15. End day 1 8/3/2005 12:56:03 AM
  16. Start day 2 8/3/2005 12:56:03 AM
  17. Start process claims 8/3/2005 12:56:03 AM
  18. End process claims 8/3/2005 12:56:04 AM
  19. Start make orders 8/3/2005 12:56:04 AM
  20. End make orders 8/3/2005 12:56:16 AM
  21. Start control stock 8/3/2005 12:56:16 AM
  22. End control stock 8/3/2005 12:56:18 AM
  23. Start recieve stock 8/3/2005 12:56:18 AM
  24. End recieve stock 8/3/2005 12:56:18 AM
  25. Start reserve stock 8/3/2005 12:56:18 AM
  26. End reserve stock 8/3/2005 12:56:19 AM
  27. Start close orders 8/3/2005 12:56:19 AM
  28. End close orders 8/3/2005 12:56:19 AM
  29. End day 2 8/3/2005 12:56:19 AM
  30. Start day 3 8/3/2005 12:56:19 AM
  31. Start process claims 8/3/2005 12:56:19 AM
  32. End process claims 8/3/2005 12:56:20 AM
  33. Start make orders 8/3/2005 12:56:20 AM
  34. End make orders 8/3/2005 12:56:31 AM
  35. Start control stock 8/3/2005 12:56:31 AM
  36. End control stock 8/3/2005 12:56:33 AM
  37. Start recieve stock 8/3/2005 12:56:33 AM
  38. End recieve stock 8/3/2005 12:56:34 AM
  39. Start reserve stock 8/3/2005 12:56:34 AM
  40. End reserve stock 8/3/2005 12:56:35 AM
  41. Start close orders 8/3/2005 12:56:35 AM
  42. End close orders 8/3/2005 12:56:35 AM
  43. End day 3 8/3/2005 12:56:35 AM
  44. Start day 4 8/3/2005 12:56:35 AM
  45. Start process claims 8/3/2005 12:56:35 AM
  46. End process claims 8/3/2005 12:56:35 AM
  47. Start make orders 8/3/2005 12:56:35 AM
  48. End make orders 8/3/2005 12:56:45 AM
  49. Start control stock 8/3/2005 12:56:45 AM
  50. End control stock 8/3/2005 12:56:48 AM
  51. Start recieve stock 8/3/2005 12:56:48 AM
  52. End recieve stock 8/3/2005 12:56:49 AM
  53. Start reserve stock 8/3/2005 12:56:49 AM
  54. End reserve stock 8/3/2005 12:56:50 AM
  55. Start close orders 8/3/2005 12:56:50 AM
  56. End close orders 8/3/2005 12:56:50 AM
  57. End day 4 8/3/2005 12:56:50 AM
  58. Start day 5 8/3/2005 12:56:50 AM
  59. Start process claims 8/3/2005 12:56:50 AM
  60. End process claims 8/3/2005 12:56:50 AM
  61. Start make orders 8/3/2005 12:56:50 AM
  62. End make orders 8/3/2005 12:57:01 AM
  63. Start control stock 8/3/2005 12:57:01 AM
  64. End control stock 8/3/2005 12:57:04 AM
  65. Start recieve stock 8/3/2005 12:57:04 AM
  66. End recieve stock 8/3/2005 12:57:05 AM
  67. Start reserve stock 8/3/2005 12:57:05 AM
  68. End reserve stock 8/3/2005 12:57:07 AM
  69. Start close orders 8/3/2005 12:57:07 AM
  70. End close orders 8/3/2005 12:57:07 AM
  71. End day 5 8/3/2005 12:57:07 AM
  72. Start day 6 8/3/2005 12:57:07 AM
  73. Start process claims 8/3/2005 12:57:07 AM
  74. End process claims 8/3/2005 12:57:07 AM
  75. Start make orders 8/3/2005 12:57:07 AM
  76. End make orders 8/3/2005 12:57:17 AM
  77. Start control stock 8/3/2005 12:57:17 AM
  78. End control stock 8/3/2005 12:57:22 AM
  79. Start recieve stock 8/3/2005 12:57:22 AM
  80. End recieve stock 8/3/2005 12:57:23 AM
  81. Start reserve stock 8/3/2005 12:57:23 AM
  82. End reserve stock 8/3/2005 12:57:26 AM
  83. Start close orders 8/3/2005 12:57:26 AM
  84. End close orders 8/3/2005 12:57:26 AM
  85. End day 6 8/3/2005 12:57:26 AM
  86. Start day 7 8/3/2005 12:57:26 AM
  87. Start process claims 8/3/2005 12:57:26 AM
  88. End process claims 8/3/2005 12:57:26 AM
  89. Start make orders 8/3/2005 12:57:26 AM
  90. End make orders 8/3/2005 12:57:38 AM
  91. Start control stock 8/3/2005 12:57:38 AM
  92. End control stock 8/3/2005 12:57:43 AM
  93. Start recieve stock 8/3/2005 12:57:43 AM
  94. End recieve stock 8/3/2005 12:57:44 AM
  95. Start reserve stock 8/3/2005 12:57:44 AM
  96. End reserve stock 8/3/2005 12:57:47 AM
  97. Start close orders 8/3/2005 12:57:47 AM
  98. End close orders 8/3/2005 12:57:48 AM
  99. End day 7 8/3/2005 12:57:48 AM
  100. Start day 8 8/3/2005 12:57:48 AM
  101. Start process claims 8/3/2005 12:57:48 AM
  102. End process claims 8/3/2005 12:57:48 AM
  103. Start make orders 8/3/2005 12:57:48 AM
  104. End make orders 8/3/2005 12:57:58 AM
  105. Start control stock 8/3/2005 12:57:58 AM
  106. End control stock 8/3/2005 12:58:04 AM
  107. Start recieve stock 8/3/2005 12:58:04 AM
  108. End recieve stock 8/3/2005 12:58:05 AM
  109. Start reserve stock 8/3/2005 12:58:05 AM
  110. End reserve stock 8/3/2005 12:58:09 AM
  111. Start close orders 8/3/2005 12:58:09 AM
  112. End close orders 8/3/2005 12:58:09 AM
  113. End day 8 8/3/2005 12:58:09 AM
  114. Start day 9 8/3/2005 12:58:09 AM
  115. Start process claims 8/3/2005 12:58:09 AM
  116. End process claims 8/3/2005 12:58:09 AM
  117. Start make orders 8/3/2005 12:58:09 AM
  118. End make orders 8/3/2005 12:58:20 AM
  119. Start control stock 8/3/2005 12:58:20 AM
  120. End control stock 8/3/2005 12:58:27 AM
  121. Start recieve stock 8/3/2005 12:58:27 AM
  122. End recieve stock 8/3/2005 12:58:29 AM
  123. Start reserve stock 8/3/2005 12:58:29 AM
  124. End reserve stock 8/3/2005 12:58:33 AM
  125. Start close orders 8/3/2005 12:58:33 AM
  126. End close orders 8/3/2005 12:58:33 AM
  127. End day 9 8/3/2005 12:58:33 AM
  128. Start day 10 8/3/2005 12:58:33 AM
  129. Start process claims 8/3/2005 12:58:33 AM
  130. End process claims 8/3/2005 12:58:33 AM
  131. Start make orders 8/3/2005 12:58:33 AM
  132. End make orders 8/3/2005 12:58:45 AM
  133. Start control stock 8/3/2005 12:58:45 AM
  134. End control stock 8/3/2005 12:58:54 AM
  135. Start recieve stock 8/3/2005 12:58:54 AM
  136. End recieve stock 8/3/2005 12:58:55 AM
  137. Start reserve stock 8/3/2005 12:58:55 AM
  138. End reserve stock 8/3/2005 12:59:00 AM
  139. Start close orders 8/3/2005 12:59:00 AM
  140. End close orders 8/3/2005 12:59:00 AM
  141. End day 10 8/3/2005 12:59:00 AM
  142. End on 8/3/2005 12:59:00 AM


 
Soit un peu plus de 3 minutes. Ca me semble pas mal. Je lance maintenant avec les paramètres :
 
360 jours
5000 commandes par jour
10 produits par commande
 
Vais dodoer :D

n°1168455
docmaboul
Posté le 03-08-2005 à 07:26:43  profilanswer
 

drasche a écrit :

1/ MySQL tourne en mode "émulé" sous Windows (CygWin powah)


 
taratata. (enfin, ce genre de conneries:
 

Code :
  1. #define pthread_mutex_init(A,B)  InitializeCriticalSection(A)
  2. #define pthread_mutex_lock(A)    (EnterCriticalSection(A),0)
  3. #define pthread_mutex_unlock(A)  LeaveCriticalSection(A)
  4. #define pthread_mutex_destroy(A) DeleteCriticalSection(A)


 
c'est pas ce que j'appelle une émulation cygwin)


Message édité par docmaboul le 03-08-2005 à 08:10:57
n°1168581
sircam
I Like Trains
Posté le 03-08-2005 à 10:51:12  profilanswer
 

Arjuna a écrit :

ce que tu ne veux pas comprendre, c'est que le nom des tables ou l'agencement des requêtes les unes derrière les autre ne change en rien le test. ce qui change, c'est d'avoir non pas un pauvre "left outer join" en se disant "y'en a plein dans les applications", mais de véritables requêtes complexes qui ne se contentent pas d'élargir les parties annales des mouches juste pour se donner l'impression d'être complexes.


M'enfin ?  :heink:
 
Y'a moyen de faire de véritables requêtes complexes qui n'endommagent pas les parties intimes des insectes sans pour autant devoir reprendre un vrai schéma avec de vraies données.
 
Au contraire, un schéma "abstrait" créé intelligemment de toutes pièces te donne la possibilité de simplifier ou de complexifier, même de manière automatisée, en ce compris au niveau des données.
 
Un benchmark fait sur un environnement donné n'est pas aisément généralisable -- c'est typiquement un bench pragmatique, pour améliorer les perfs d'un système donné.
 
Si tu fais un bench général, pour tester les perfs d'un produit par rapport à un autre, un environnement réel n'est pas un pré-requis. Mais ceci dit, TU FAIS COMME TU VEUX, tu pars sur les bases que veux, c'est ton bench. Permets-moi simplement d'avoir fait ce commentaire.
 
   [:pingouino]  


---------------
Now Playing: {SYNTAX ERROR AT LINE 1210}
n°1168583
Arjuna
Aircraft Ident.: F-MBSD
Posté le 03-08-2005 à 10:53:02  profilanswer
 

C'est bien ce qu'il me semblait.
 
Il y a toutefois la couche d'accès aux fichiers qui réutilise une Lib à la base développée pour les API de Linux, et qui n'utilise donc pas celles de Windows. D'après la doc, ils parlent surtout d'un certain nombre de limitations au niveau programmation (problèmes du nombre d'accès concurents à un même fichier, etc.) mais aussi d'un problème de performances (assez mineur ceci dit).
Ils indiquent qu'ils sont en train d'implémenter une autre lib dédiée aux API de Windows, mais je ne sais pas à partir de quelle version on va la trouver, et il est hors de question de faire un bench sur une version 5.x, qui est toujours en béta.

n°1168589
Arjuna
Aircraft Ident.: F-MBSD
Posté le 03-08-2005 à 10:58:00  profilanswer
 

sircam > je ne t'engueule pas hein ;)
 
mais bon, pour moi, un bench comme tu le préconnises n'est pas fiable dans la mesure où...
Pour chaque "type" de requêtes, on va dire "MySQL SQL Server est plus rapide". C'est bien, on a des chiffres dans un joli tableau. Seulement, en environnement réel, quel est l'impact de la combinaison d'une requête où MySQL dépasse SQL Server avec une autre où c'est l'inverse ? Quel est la proportion de chaque type de requête dans une application ?
Ce sont autant de réponses auxquelles on n'a pas de réponse en fait. Et c'est pour ça que je veux partir d'un test en environnement "réel".
 
De plus, faire une requête complexe en partant d'un schéma et de données abstraites, j'y arrive pas. Je ne peux réfléchir à un problème que si je peux me le représenter avec des règles absolues. Après, je dis pas que c'est impossible.

n°1168626
sircam
I Like Trains
Posté le 03-08-2005 à 11:17:51  profilanswer
 

Citation :

Quel est la proportion de chaque type de requête dans une application


C'est précisemment ce que, à mon sens, tu ne parviendras pas à reproduire. Les applications et les schémas qui les sous-tendent sont tellement variés selon les domaines qu'il est impossible d'en extraire des exemples représentatifs.
 
Pour te donner une idée, un schéma tel que celui que tu propose, dans le domaine financier, ça n'a bien entendu aucun rapport. C'est sans doute le genre de schémas auquels tu es confronté tous les jours. De mon côté, ça ne me dit rien du tout !
 
Il faudrait presque un étude là-dessus pour être pertinent et dégager des généralités; tu imagines l'ampleur du boulot ???
 

Citation :

De plus, faire une requête complexe en partant d'un schéma et de données abstraites, j'y arrive pas. Je ne peux réfléchir à un problème que si je peux me le représenter avec des règles absolues.


Beh oui. Faire des jointures entre T1, T2, T3 et T4 sur des champs F1, F2, F3 et F4 avec des index IDX1 et IDX2, c'est tout de suite nettement moins parlant.
 
[:pingouino]


---------------
Now Playing: {SYNTAX ERROR AT LINE 1210}
n°1168629
sircam
I Like Trains
Posté le 03-08-2005 à 11:19:32  profilanswer
 

Enfin, ça ne rend pas ton test moins intéressant pour autant, mais d'un point de vue strictement "scientifique", la base est un peu restreinte pour être généralisable.


---------------
Now Playing: {SYNTAX ERROR AT LINE 1210}
n°1168811
Arjuna
Aircraft Ident.: F-MBSD
Posté le 03-08-2005 à 13:02:18  profilanswer
 

sircam a écrit :

Citation :

De plus, faire une requête complexe en partant d'un schéma et de données abstraites, j'y arrive pas. Je ne peux réfléchir à un problème que si je peux me le représenter avec des règles absolues.


Beh oui. Faire des jointures entre T1, T2, T3 et T4 sur des champs F1, F2, F3 et F4 avec des index IDX1 et IDX2, c'est tout de suite nettement moins parlant.
[:pingouino]


Ben si...
 
Regarde ma requête de contrôle des stocks :

Code :
  1. select (
  2. select top 1 supplier_id
  3. from suppliement su
  4. where su.warehouse_id = st.warehouse_id
  5. and su.product_id = el.product_id
  6. and (
  7.  price = (
  8.   select min(price)
  9.   from suppliement su2
  10.   where su2.warehouse_id = su.warehouse_id
  11.   and su2.product_id = su.product_id
  12.   and su2.delay <= (
  13.    select min(e.date_event)
  14.    from
  15.     city c,
  16.     address a,
  17.     event_line el,
  18.     event e
  19.    where e.type = 'ORD'
  20.    and e.status = 'V'
  21.    and el.event_id = e.id
  22.    and el.status != 'R'
  23.    and el.product_id = su2.product_id
  24.    and a.user_id = e.user_id
  25.    and a.type = 'LIV'
  26.    and c.id = a.city
  27.    and c.warehouse_id = su2.warehouse_id
  28.   ) + 10
  29.   and su2.max_supply >= (
  30.    -1 * (
  31.     st.stock - (
  32.      sum(el.quantity) + st.reserved
  33.     ) + isNull(
  34.      (
  35.       select sum(el2.quantity)
  36.       from
  37.        event_line el2,
  38.        event e2
  39.       where e2.type = 'PUR'
  40.       and e2.warehouse_id = st.warehouse_id
  41.       and e2.date_event >= @day - 30
  42.       and el2.event_id = e2.id
  43.       and el2.product_id = el.product_id
  44.      )
  45.     , 0)
  46.    ) - st.qtysupply
  47.   )
  48.  )
  49.  and su.max_supply >= (
  50.   -1 * (
  51.    st.stock - (
  52.     sum(el.quantity) + st.reserved
  53.    ) + isNull(
  54.     (
  55.      select sum(el2.quantity)
  56.      from
  57.       event_line el2,
  58.       event e2
  59.      where e2.type = 'PUR'
  60.      and e2.warehouse_id = st.warehouse_id
  61.      and e2.date_event >= @day - 30
  62.      and el2.event_id = e2.id
  63.      and el2.product_id = el.product_id
  64.     )
  65.    , 0)
  66.   ) - st.qtysupply
  67.  )
  68.  or delay =
  69.  (
  70.   select min(delay)
  71.   from suppliement su2
  72.   where su2.warehouse_id = su.warehouse_id
  73.   and su2.product_id = su.product_id
  74.   and su2.delay >
  75.   (
  76.    select min(e.date_event)
  77.    from
  78.     city c,
  79.     address a,
  80.     event_line el,
  81.     event e
  82.    where e.type = 'ORD'
  83.    and e.status = 'V'
  84.    and el.event_id = e.id
  85.    and el.status != 'R'
  86.    and el.product_id = su2.product_id
  87.    and a.user_id = e.user_id
  88.    and a.type = 'LIV'
  89.    and c.id = a.city
  90.    and c.warehouse_id = su2.warehouse_id
  91.   ) + 10
  92.   and su2.max_supply >=
  93.   (
  94.    -1 *
  95.    (
  96.     st.stock -
  97.     (
  98.      sum(el.quantity) + st.reserved
  99.     ) + isNull(
  100.      (
  101.       select sum(el2.quantity)
  102.       from
  103.        event_line el2,
  104.        event e2
  105.       where e2.type = 'PUR'
  106.       and e2.warehouse_id = st.warehouse_id
  107.       and e2.date_event >= @day - 30
  108.       and el2.event_id = e2.id
  109.       and el2.product_id = el.product_id
  110.      )
  111.     , 0)
  112.    ) - st.qtysupply
  113.   )
  114.   and not exists
  115.   (
  116.    select null
  117.    from suppliement su3
  118.    where su3.warehouse_id = su2.warehouse_id
  119.    and su3.product_id = su2.warehouse_id
  120.    and su3.delay <=
  121.    (
  122.     select min(e.date_event)
  123.     from
  124.      city c,
  125.      address a,
  126.      event_line el,
  127.      event e
  128.     where e.type = 'ORD'
  129.     and e.status = 'V'
  130.     and el.event_id = e.id
  131.     and el.status != 'R'
  132.     and el.product_id = su3.product_id
  133.     and a.user_id = e.user_id
  134.     and a.type = 'LIV'
  135.     and c.id = a.city
  136.     and c.warehouse_id = su3.warehouse_id
  137.    ) + 10
  138.   )
  139.  )
  140.  and su.max_supply >= (
  141.   -1 * (
  142.    st.stock - (
  143.     sum(el.quantity) + st.reserved
  144.    ) + isNull(
  145.     (
  146.      select sum(el2.quantity)
  147.      from
  148.       event_line el2,
  149.       event e2
  150.      where e2.type = 'PUR'
  151.      and e2.warehouse_id = st.warehouse_id
  152.      and e2.date_event >= @day - 30
  153.      and el2.event_id = e2.id
  154.      and el2.product_id = el.product_id
  155.     )
  156.    , 0)
  157.   ) - st.qtysupply
  158.  )
  159. )
  160. ) supplier_id,
  161. st.warehouse_id,
  162. el.product_id,
  163. -1 *
  164. (
  165. st.stock -
  166. (
  167.  sum(el.quantity) + st.reserved
  168. ) + isNull(
  169.  (
  170.   select sum(el2.quantity)
  171.   from
  172.    event_line el2,
  173.    event e2
  174.   where e2.type = 'PUR'
  175.   and e2.status = 'V'
  176.   and e2.warehouse_id = st.warehouse_id
  177.   and el2.event_id = e2.id
  178.   and el2.product_id = el.product_id
  179.  )
  180. , 0)
  181. ) - st.qtysupply quantityPurchase
  182. from
  183. stock st,
  184. city ci,
  185. address a,
  186. event_line el,
  187. event e
  188. where e.status = 'V'
  189. and e.type = 'ORD'
  190. and el.event_id = e.id
  191. and el.status = 'V'
  192. and a.user_id = e.user_id
  193. and a.type = 'LIV'
  194. and ci.id = a.city
  195. and st.warehouse_id = ci.warehouse_id
  196. and st.product_id = el.product_id
  197. group by
  198. st.warehouse_id,
  199. el.product_id,
  200. st.reserved,
  201. st.stock,
  202. st.qtysupply
  203. having -1 *
  204. (
  205. st.stock -
  206. (
  207.  sum(el.quantity) + st.reserved
  208. ) + isNull(
  209.  (
  210.   select sum(el2.quantity)
  211.   from
  212.    event_line el2,
  213.    event e2
  214.   where e2.type = 'PUR'
  215.   and e2.status = 'V'
  216.   and e2.warehouse_id = st.warehouse_id
  217.   and el2.event_id = e2.id
  218.   and el2.product_id = el.product_id
  219.  )
  220. , 0)
  221. ) - st.qtysupply > 0
  222. order by
  223. supplier_id,
  224. st.warehouse_id


 
Ben en version T1.F1 (pas complètement, c'est chiant à faire), ça donne :

Code :
  1. select (
  2. select top 1 f1
  3. from t6 su
  4. where su.f2 = st.f1
  5. and su.f3 = el.f2
  6. and (
  7.  price = (
  8.   select min(price)
  9.   from t6 su2
  10.   where su2.f2 = su.f2
  11.   and su2.f3 = su.f3
  12.   and su2.delay <= (
  13.    select min(e.date_t1)
  14.    from
  15.     t4 c,
  16.     t3 a,
  17.     t2 el,
  18.     t1 e
  19.    where e.type = 'ORD'
  20.    and e.status = 'V'
  21.    and el.t1_id = e.id
  22.    and el.status != 'R'
  23.    and el.f2 = su2.f3
  24.    and a.user_id = e.user_id
  25.    and a.type = 'LIV'
  26.    and c.id = a.t4
  27.    and c.f2 = su2.f2
  28.   ) + 10
  29.   and su2.max_supply >= (
  30.    -1 * (
  31.     st.t5 - (
  32.      sum(el.quantity) + st.reserved
  33.     ) + isNull(
  34.      (
  35.       select sum(el2.quantity)
  36.       from
  37.        t2 el2,
  38.        t1 e2
  39.       where e2.type = 'PUR'
  40.       and e2.f4 = st.f1
  41.       and e2.date_t1 >= @day - 30
  42.       and el2.t1_id = e2.id
  43.       and el2.f3 = el.f3
  44.      )
  45.     , 0)
  46.    ) - st.qtysupply
  47.   )
  48.  )
  49.  and su.max_supply >= (
  50.   -1 * (
  51.    st.t5 - (
  52.     sum(el.quantity) + st.reserved
  53.    ) + isNull(
  54.     (
  55.      select sum(el2.quantity)
  56.      from
  57.       t2 el2,
  58.       t1 e2
  59.      where e2.type = 'PUR'
  60.      and e2.f4 = st.f1
  61.      and e2.date_t1 >= @day - 30
  62.      and el2.t1_id = e2.id
  63.      and el2.f3 = el.f3
  64.     )
  65.    , 0)
  66.   ) - st.qtysupply
  67.  )
  68.  or delay =
  69.  (
  70.   select min(delay)
  71.   from t6 su2
  72.   where su2.f2 = su.f2
  73.   and su2.f3 = su.f3
  74.   and su2.delay >
  75.   (
  76.    select min(e.date_t1)
  77.    from
  78.     t4 c,
  79.     t3 a,
  80.     t2 el,
  81.     t1 e
  82.    where e.type = 'ORD'
  83.    and e.status = 'V'
  84.    and el.t1_id = e.id
  85.    and el.status != 'R'
  86.    and el.f3 = su2.f3
  87.    and a.user_id = e.user_id
  88.    and a.type = 'LIV'
  89.    and c.id = a.t4
  90.    and c.f2 = su2.f2
  91.   ) + 10
  92.   and su2.max_supply >=
  93.   (
  94.    -1 *
  95.    (
  96.     st.t5 -
  97.     (
  98.      sum(el.quantity) + st.reserved
  99.     ) + isNull(
  100.      (
  101.       select sum(el2.quantity)
  102.       from
  103.        t2 el2,
  104.        t1 e2
  105.       where e2.type = 'PUR'
  106.       and e2.f4 = st.f1
  107.       and e2.date_t1 >= @day - 30
  108.       and el2.t1_id = e2.id
  109.       and el2.f3 = el.f3
  110.      )
  111.     , 0)
  112.    ) - st.qtysupply
  113.   )
  114.   and not exists
  115.   (
  116.    select null
  117.    from t6 su3
  118.    where su3.f2 = su2.f2
  119.    and su3.f3 = su2.f3
  120.    and su3.delay <=
  121.    (
  122.     select min(e.date_t1)
  123.     from
  124.      t4 c,
  125.      t3 a,
  126.      t2 el,
  127.      t1 e
  128.     where e.type = 'ORD'
  129.     and e.status = 'V'
  130.     and el.t1_id = e.id
  131.     and el.status != 'R'
  132.     and el.f3 = su3.f3
  133.     and a.user_id = e.user_id
  134.     and a.type = 'LIV'
  135.     and c.id = a.t4
  136.     and c.f2 = su3.f2
  137.    ) + 10
  138.   )
  139.  )
  140.  and su.max_supply >= (
  141.   -1 * (
  142.    st.t5 - (
  143.     sum(el.quantity) + st.reserved
  144.    ) + isNull(
  145.     (
  146.      select sum(el2.quantity)
  147.      from
  148.       t2 el2,
  149.       t1 e2
  150.      where e2.type = 'PUR'
  151.      and e2.f4 = st.f1
  152.      and e2.date_t1 >= @day - 30
  153.      and el2.t1_id = e2.id
  154.      and el2.f3 = el.f3
  155.     )
  156.    , 0)
  157.   ) - st.qtysupply
  158.  )
  159. )
  160. ) f1,
  161. st.f1,
  162. el.f3,
  163. -1 *
  164. (
  165. st.t5 -
  166. (
  167.  sum(el.quantity) + st.reserved
  168. ) + isNull(
  169.  (
  170.   select sum(el2.quantity)
  171.   from
  172.    t2 el2,
  173.    t1 e2
  174.   where e2.type = 'PUR'
  175.   and e2.status = 'V'
  176.   and e2.f4 = st.f1
  177.   and el2.t1_id = e2.id
  178.   and el2.f3 = el.f3
  179.  )
  180. , 0)
  181. ) - st.qtysupply quantityPurchase
  182. from
  183. t5 st,
  184. t4 ci,
  185. t3 a,
  186. t2 el,
  187. t1 e
  188. where e.status = 'V'
  189. and e.type = 'ORD'
  190. and el.t1_id = e.id
  191. and el.status = 'V'
  192. and a.user_id = e.user_id
  193. and a.type = 'LIV'
  194. and ci.id = a.t4
  195. and st.f1 = ci.f2
  196. and st.f2= el.f3
  197. group by
  198. st.f1,
  199. el.f3
  200. st.reserved,
  201. st.t5,
  202. st.qtysupply
  203. having -1 *
  204. (
  205. st.t5 -
  206. (
  207.  sum(el.quantity) + st.reserved
  208. ) + isNull(
  209.  (
  210.   select sum(el2.quantity)
  211.   from
  212.    t2 el2,
  213.    t1 e2
  214.   where e2.type = 'PUR'
  215.   and e2.status = 'V'
  216.   and e2.f4 = st.f1
  217.   and el2.t1_id = e2.id
  218.   and el2.f3 el.f3
  219.  )
  220. , 0)
  221. ) - st.qtysupply > 0
  222. order by
  223. f1,
  224. st.f1


 
Bah perso, autant la première, je la pond les yeux fermés à 3h du mat', et le lendemain j'arrive à peu près à m'y retrouver (j'ai d'ailleurs vu plein de bugs, faut que je corrige ça ce soir :D), autant la seconde bah...

mood
Publicité
Posté le   profilanswer
 

 Page :   1  2
Page Suivante

Aller à :
Ajouter une réponse
 

Sujets relatifs
[MySQL] Update multitablesvba access mysql
Amélioration de performances d'une base SQL Server 2000SQL Server: Select date qui ont minimum une heure d'ecart
SQL Server et le XML[RESOLU] [MySQL API C] Problème avec mysql_query
[SQL] Problème écriture requête 
Plus de sujets relatifs à : Tentative de mini-bench comparant MySQL et SQL Server


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR