Je vais demander et répondre à cette question parce que cela m'a pris pour toujours pour comprendre et je souhaite que la réponse avait été ici pour commencer. P>
Le problème: une requête UNIXODBC à long terme bloque toutes les autres de la même application. P>
La question: comment ça arrête cela de se produire? P>
3 Réponses :
La réponse, sous la forme d'un commentaire coupé et pâte de __handles.c - Je sais, pourquoi tout le monde ne pense-t-il pas de regarder là-bas pour que la documentation commence, non?
/* * use just one mutex for all the lists, this avoids any issues * with deadlocks, the performance issue should be minimal, if it * turns out to be a problem, we can readdress this * * We also have a mutex to protect the connection pooling code * * If compiled with thread support the DM allows four different * thread strategies * * Level 0 - Only the DM internal structures are protected * the driver is assumed to take care of it's self * * Level 1 - The driver is protected down to the statement level * each statement will be protected, and the same for the connect * level for connect functions, note that descriptors are considered * equal to statements when it comes to thread protection. * * Level 2 - The driver is protected at the connection level. only * one thread can be in a particular driver at one time * * Level 3 - The driver is protected at the env level, only one thing * at a time. * * By default the driver open connections with a lock level of 3, * this can be changed by adding the line * * Threading = N * * to the driver entry in odbcinst.ini, where N is the locking level * (0-3) * */
Je pense que vous n'avez pas saisi mon argument. Le but est que l'on peut définir le niveau de filetage explicitement pour travailler avec des conducteurs qui fournissent une certaine sécurité de la sécurité du fil. Myisam n'a rien à voir avec ça.
@sclv, merci! La documentation UNIXODBC est choquante clairsemée. : /
juste un ajout à cette réponse. La version actuelle de UNIXODBC 2.3.0 par défaut à la filetage = 0, la valeur par défaut est maintenant pour supposer que le pilote est en sécurité. C'était une hypothèse risquée dans les années passées, pas tellement maintenant. P>
Si votre pilote prend en charge les fonctions asynchrones, vous pouvez l'activer et exécuter des fonctions de consommation de temps en mode ASYNC. p>
Aucun filetage requis au côté de l'application. p>