Padá mi čarovný minecraft



Prosím pomožte mi keď spustím Technick launcher a spustím čarovný minecraft tak po chvýlke mi tam napíše : Minecraft has crashed!   Minecraft has stopped running because it encountered a problem; Failed to start gameA full error report has been saved to C:\Users\pc\AppData\Roaming\.technic\modpacks\carovnyminecraft-reloaded\crash-reports\crash-2017-01-23\_17.51.17-client.txt - Please include a copy of that file (Not this screen!) if you report this crash to anyone; without it, they will not be able to help fix the crash :( BEGIN ERROR REPORT 5f010bf4 Full report at:C:\Users\pc\AppData\Roaming\.technic\modpacks\carovnyminecraft-reloaded\crash-reports\crash-2017-01-23\_17.51.17-client.txtPlease show that file to Mojang, NOT just this screen!Generated 23.1.2017 17:51-- System Details --Details: Minecraft Version: 1.5.2 Operating System: Windows 7 (amd64) version 6.1 Java Version: 1.8.0\_40, Oracle Corporation Java VM Version: Java HotSpot(TM) 64-Bit Server VM (mixed mode), Oracle Corporation Memory: 3328588048 bytes (3174 MB) / 3601858560 bytes (3435 MB) up to 3601858560 bytes (3435 MB) JVM Flags: 3 total; -XX:HeapDumpPath=MojangTricksIntelDriversForPerformance\_javaw.exe\_minecraft.exe.heapdump -Xms3584m -Xmx3584m AABB Pool Size: 0 (0 bytes; 0 MB) allocated, 0 (0 bytes; 0 MB) used Suspicious classes: FML and Forge are installed IntCache: cache: 0, tcache: 0, allocated: 0, tallocated: 0 FML: MCP v7.51 FML v5.2.23.737 Minecraft Forge 7.8.1.737 21 mods loaded, 21 mods active mcp{7.51} [Minecraft Coder Pack] (minecraft.jar) Unloaded->Constructed->Pre-initialized->Initialized->Post-initialized FML{5.2.23.737} [Forge Mod Loader] (coremods) Unloaded->Constructed->Pre-initialized->Initialized->Post-initialized Forge{7.8.1.737} [Minecraft Forge] (coremods) Unloaded->Constructed->Pre-initialized->Initialized->Post-initialized CodeChickenCore{0.8.6.15} [CodeChicken Core] (coremods) Unloaded->Constructed->Pre-initialized->Initialized->Post-initialized NotEnoughItems{1.5.2.25} [Not Enough Items] (coremods) Unloaded->Constructed->Pre-initialized->Initialized->Post-initialized DamageIndicatorsMod{2.7.0.1} [Damage Indicators] (modpack.jar) Unloaded->Constructed->Pre-initialized->Initialized->Post-initialized GuiAPI{0.15.6} [GuiAPI] (GuiAPI-0.15.6-1.5.2.jar) Unloaded->Constructed->Pre-initialized->Initialized->Post-initialized mod\_BackTools{1.5.2v1} [mod\_BackTools] (BackTools1.5.2v1.zip) Unloaded->Constructed->Pre-initialized->Initialized->Post-initialized BiblioCraft{1.3.3} [BiblioCraft] (BiblioCraft[v1.3.3].zip) Unloaded->Constructed->Pre-initialized->Initialized->Post-initialized CustomSpawner{2.2.2} [DrZhark's CustomSpawner] (CustomMobSpawner 2.2.2.zip) Unloaded->Constructed->Pre-initialized->Initialized->Post-initialized MoCreatures{5.2.3} [DrZhark's Mo'Creatures Mod] (DrZharks MoCreatures Mod v5.2.3.zip) Unloaded->Constructed->Pre-initialized->Initialized->Errored ExtrabiomesXL{3.14.1} [ExtrabiomesXL] (ExtrabiomesXL-universal-1.5.2-3.14.1.jar) Unloaded->Constructed->Pre-initialized->Initialized->Post-initialized inventorytweaks{1.54b} [Inventory Tweaks] (InventoryTweaks-1.54b.jar) Unloaded->Constructed->Pre-initialized->Initialized->Post-initialized NEIPlugins{1.0.9.3} [NEI Plugins] (NEIPlugins-1.0.9.3.jar) Unloaded->Constructed->Pre-initialized->Initialized->Post-initialized SoulShards{1.0.16} [Soul Shards] (SoulShards-1.0.36-universal-srg.jar) Unloaded->Constructed->Pre-initialized->Initialized->Post-initialized Thaumcraft{3.0.5h1} [Thaumcraft] (Thaumcraft3.0.5h.zip) Unloaded->Constructed->Pre-initialized->Initialized->Post-initialized ThaumicTinkerer{1.0.8} [Thaumic Tinkerer] (Thaumic Tinkerer [1.0.8].zip) Unloaded->Constructed->Pre-initialized->Initialized->Post-initialized TC{4.0.2\_003} [Traincraft] (Traincraft-4.0.2\_003.jar) Unloaded->Constructed->Pre-initialized->Initialized->Post-initialized TwilightForest{1.18.2} [The Twilight Forest] (twilightforest-1.18.2.zip) Unloaded->Constructed->Pre-initialized->Initialized->Post-initialized weaponmod{1.5.2 v1.12.0} [Balkon's WeaponMod] (WeaponMod-v1.12.zip) Unloaded->Constructed->Pre-initialized->Initialized->Post-initialized mod\_ZanMinimap{0.9.4} [mod\_ZanMinimap] (ZansMinimap1.5.2.zip) Unloaded->Constructed->Pre-initialized->Initialized->Post-initialized LWJGL: 2.9.0 OpenGL: ATI Radeon 3000 Graphics GL version 3.3.11672 Compatibility Profile Context, ATI Technologies Inc. Is Modded: Definitely; Client brand changed to 'fml,forge' Type: Client (map\_client.txt) Texture Pack: Default Profiler Position: N/A (disabled) Vec3 Pool Size: ~~ERROR~~ NullPointerException: nulljava.lang.NullPointerException at drzhark.mocreatures.MoCProxy.initializeEntities(MoCProxy.java:875) at drzhark.mocreatures.MoCProxy.ConfigPostInit(MoCProxy.java:644) at drzhark.mocreatures.client.MoCClientProxy.ConfigPostInit(MoCClientProxy.java:735) at drzhark.mocreatures.MoCreatures.postInit(MoCreatures.java:480) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) at java.lang.reflect.Method.invoke(Unknown Source) at cpw.mods.fml.common.FMLModContainer.handleModStateEvent(FMLModContainer.java:494) at sun.reflect.GeneratedMethodAccessor5.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) at java.lang.reflect.Method.invoke(Unknown Source) at com.google.common.eventbus.EventHandler.handleEvent(EventHandler.java:74) at com.google.common.eventbus.SynchronizedEventHandler.handleEvent(SynchronizedEventHandler.java:45) at com.google.common.eventbus.EventBus.dispatch(EventBus.java:314) at com.google.common.eventbus.EventBus.dispatchQueuedEvents(EventBus.java:296) at com.google.common.eventbus.EventBus.post(EventBus.java:267) at cpw.mods.fml.common.LoadController.sendEventToModContainer(LoadController.java:192) at cpw.mods.fml.common.LoadController.propogateStateMessage(LoadController.java:172) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) at java.lang.reflect.Method.invoke(Unknown Source) at com.google.common.eventbus.EventHandler.handleEvent(EventHandler.java:74) at com.google.common.eventbus.SynchronizedEventHandler.handleEvent(SynchronizedEventHandler.java:45) at com.google.common.eventbus.EventBus.dispatch(EventBus.java:314) at com.google.common.eventbus.EventBus.dispatchQueuedEvents(EventBus.java:296) at com.google.common.eventbus.EventBus.post(EventBus.java:267) at cpw.mods.fml.common.LoadController.distributeStateMessage(LoadController.java:103) at cpw.mods.fml.common.Loader.initializeMods(Loader.java:696) at cpw.mods.fml.client.FMLClientHandler.finishMinecraftLoading(FMLClientHandler.java:213) at net.minecraft.client.Minecraft.func\_71384\_a(Minecraft.java:448) at net.minecraft.client.MinecraftAppletImpl.func\_71384\_a(SourceFile:56) at net.minecraft.client.Minecraft.run(Minecraft.java:733) at java.lang.Thread.run(Unknown Source) END ERROR REPORT 1f1e6d0e Prosím pomožte mi !!!!!
Nehraj PC hry a bez radeji ven na vzduch - uvidis svet bez kosticek o kterem se ti ani nesnilo ![](/Client.Images/smileys/1.gif)
Ho přeinstaluj, molh se poškodit nějaký důležitý soubor, popřípadě nějaká nová aktualizace. Která se nestáhla, nebo stáhla ale chybně (např přerušením netu)

Na metina se vykšli, raději někde sosni WOW ![:)]( ":)") je to w podstatě to samé ale o 200% lepší ![:)]( ":)") <p>ach bože, myslím, že problém pramení ze smíchání schématu mysql různých verzí mysql. nejprve spusťte tento dotaz:</p><pre><code>desc mysql.user; </code></pre><p>pro mysql 5.6 získáte 43 sloupců</p><pre><code>mysql&gt; desc mysql.user; +++++++ | field | type | null | key | default | extra | +++++++ | host | char(60) | no | pri | | | | user | char(16) | no | pri | | | | password | char(41) | no | | | | | select\_priv | enum('n','y') | no | | n | | | insert\_priv | enum('n','y') | no | | n | | | update\_priv | enum('n','y') | no | | n | | | delete\_priv | enum('n','y') | no | | n | | | create\_priv | enum('n','y') | no | | n | | | drop\_priv | enum('n','y') | no | | n | | | reload\_priv | enum('n','y') | no | | n | | | shutdown\_priv | enum('n','y') | no | | n | | | process\_priv | enum('n','y') | no | | n | | | file\_priv | enum('n','y') | no | | n | | | grant\_priv | enum('n','y') | no | | n | | | references\_priv | enum('n','y') | no | | n | | | index\_priv | enum('n','y') | no | | n | | | alter\_priv | enum('n','y') | no | | n | | | show\_db\_priv | enum('n','y') | no | | n | | | super\_priv | enum('n','y') | no | | n | | | create\_tmp\_table\_priv | enum('n','y') | no | | n | | | lock\_tables\_priv | enum('n','y') | no | | n | | | execute\_priv | enum('n','y') | no | | n | | | repl\_slave\_priv | enum('n','y') | no | | n | | | repl\_client\_priv | enum('n','y') | no | | n | | | create\_view\_priv | enum('n','y') | no | | n | | | show\_view\_priv | enum('n','y') | no | | n | | | create\_routine\_priv | enum('n','y') | no | | n | | | alter\_routine\_priv | enum('n','y') | no | | n | | | create\_user\_priv | enum('n','y') | no | | n | | | event\_priv | enum('n','y') | no | | n | | | trigger\_priv | enum('n','y') | no | | n | | | create\_tablespace\_priv | enum('n','y') | no | | n | | | ssl\_type | enum('','any','x509','specified') | no | | | | | ssl\_cipher | blob | no | | null | | | x509\_issuer | blob | no | | null | | | x509\_subject | blob | no | | null | | | max\_questions | int(11) unsigned | no | | 0 | | | max\_updates | int(11) unsigned | no | | 0 | | | max\_connections | int(11) unsigned | no | | 0 | | | max\_user\_connections | int(11) unsigned | no | | 0 | | | plugin | char(64) | yes | | | | | authentication\_string | text | yes | | null | | | password\_expired | enum('n','y') | no | | n | | +++++++ 43 rows in set (0.15 sec) </code></pre><p>pro mysql 5.5 získáte 42 sloupců</p><pre><code>mysql&gt; desc mysql.user; +++++++ | field | type | null | key | default | extra | +++++++ | host | char(60) | no | pri | | | | user | char(16) | no | pri | | | | password | char(41) | no | | | | | select\_priv | enum('n','y') | no | | n | | | insert\_priv | enum('n','y') | no | | n | | | update\_priv | enum('n','y') | no | | n | | | delete\_priv | enum('n','y') | no | | n | | | create\_priv | enum('n','y') | no | | n | | | drop\_priv | enum('n','y') | no | | n | | | reload\_priv | enum('n','y') | no | | n | | | shutdown\_priv | enum('n','y') | no | | n | | | process\_priv | enum('n','y') | no | | n | | | file\_priv | enum('n','y') | no | | n | | | grant\_priv | enum('n','y') | no | | n | | | references\_priv | enum('n','y') | no | | n | | | index\_priv | enum('n','y') | no | | n | | | alter\_priv | enum('n','y') | no | | n | | | show\_db\_priv | enum('n','y') | no | | n | | | super\_priv | enum('n','y') | no | | n | | | create\_tmp\_table\_priv | enum('n','y') | no | | n | | | lock\_tables\_priv | enum('n','y') | no | | n | | | execute\_priv | enum('n','y') | no | | n | | | repl\_slave\_priv | enum('n','y') | no | | n | | | repl\_client\_priv | enum('n','y') | no | | n | | | create\_view\_priv | enum('n','y') | no | | n | | | show\_view\_priv | enum('n','y') | no | | n | | | create\_routine\_priv | enum('n','y') | no | | n | | | alter\_routine\_priv | enum('n','y') | no | | n | | | create\_user\_priv | enum('n','y') | no | | n | | | event\_priv | enum('n','y') | no | | n | | | trigger\_priv | enum('n','y') | no | | n | | | create\_tablespace\_priv | enum('n','y') | no | | n | | | ssl\_type | enum('','any','x509','specified') | no | | | | | ssl\_cipher | blob | no | | null | | | x509\_issuer | blob | no | | null | | | x509\_subject | blob | no | | null | | | max\_questions | int(11) unsigned | no | | 0 | | | max\_updates | int(11) unsigned | no | | 0 | | | max\_connections | int(11) unsigned | no | | 0 | | | max\_user\_connections | int(11) unsigned | no | | 0 | | | plugin | char(64) | yes | | | | | authentication\_string | text | yes | | null | | +++++++ 42 rows in set (0.01 sec) mysql&gt; </code></pre><p>pro mysql 5.1 získáte 39 sloupců</p><pre><code>mysql&gt; desc mysql.user; +++++++ | field | type | null | key | default | extra | +++++++ | host | char(60) | no | pri | | | | user | char(16) | no | pri | | | | password | char(41) | no | | | | | select\_priv | enum('n','y') | no | | n | | | insert\_priv | enum('n','y') | no | | n | | | update\_priv | enum('n','y') | no | | n | | | delete\_priv | enum('n','y') | no | | n | | | create\_priv | enum('n','y') | no | | n | | | drop\_priv | enum('n','y') | no | | n | | | reload\_priv | enum('n','y') | no | | n | | | shutdown\_priv | enum('n','y') | no | | n | | | process\_priv | enum('n','y') | no | | n | | | file\_priv | enum('n','y') | no | | n | | | grant\_priv | enum('n','y') | no | | n | | | references\_priv | enum('n','y') | no | | n | | | index\_priv | enum('n','y') | no | | n | | | alter\_priv | enum('n','y') | no | | n | | | show\_db\_priv | enum('n','y') | no | | n | | | super\_priv | enum('n','y') | no | | n | | | create\_tmp\_table\_priv | enum('n','y') | no | | n | | | lock\_tables\_priv | enum('n','y') | no | | n | | | execute\_priv | enum('n','y') | no | | n | | | repl\_slave\_priv | enum('n','y') | no | | n | | | repl\_client\_priv | enum('n','y') | no | | n | | | create\_view\_priv | enum('n','y') | no | | n | | | show\_view\_priv | enum('n','y') | no | | n | | | create\_routine\_priv | enum('n','y') | no | | n | | | alter\_routine\_priv | enum('n','y') | no | | n | | | create\_user\_priv | enum('n','y') | no | | n | | | event\_priv | enum('n','y') | no | | n | | | trigger\_priv | enum('n','y') | no | | n | | | ssl\_type | enum('','any','x509','specified') | no | | | | | ssl\_cipher | blob | no | | null | | | x509\_issuer | blob | no | | null | | | x509\_subject | blob | no | | null | | | max\_questions | int(11) unsigned | no | | 0 | | | max\_updates | int(11) unsigned | no | | 0 | | | max\_connections | int(11) unsigned | no | | 0 | | | max\_user\_connections | int(11) unsigned | no | | 0 | | +++++++ 39 rows in set (0.00 sec) mysql&gt; </code></pre><p>pro mysql 5.0 získáte 37 sloupců</p><pre><code>mysql&gt; desc mysql.user; +++++++ | field | type | null | key | default | extra | +++++++ | host | char(60) | no | pri | | | | user | char(16) | no | pri | | | | password | char(41) | no | | | | | select\_priv | enum('n','y') | no | | n | | | insert\_priv | enum('n','y') | no | | n | | | update\_priv | enum('n','y') | no | | n | | | delete\_priv | enum('n','y') | no | | n | | | create\_priv | enum('n','y') | no | | n | | | drop\_priv | enum('n','y') | no | | n | | | reload\_priv | enum('n','y') | no | | n | | | shutdown\_priv | enum('n','y') | no | | n | | | process\_priv | enum('n','y') | no | | n | | | file\_priv | enum('n','y') | no | | n | | | grant\_priv | enum('n','y') | no | | n | | | references\_priv | enum('n','y') | no | | n | | | index\_priv | enum('n','y') | no | | n | | | alter\_priv | enum('n','y') | no | | n | | | show\_db\_priv | enum('n','y') | no | | n | | | super\_priv | enum('n','y') | no | | n | | | create\_tmp\_table\_priv | enum('n','y') | no | | n | | | lock\_tables\_priv | enum('n','y') | no | | n | | | execute\_priv | enum('n','y') | no | | n | | | repl\_slave\_priv | enum('n','y') | no | | n | | | repl\_client\_priv | enum('n','y') | no | | n | | | create\_view\_priv | enum('n','y') | no | | n | | | show\_view\_priv | enum('n','y') | no | | n | | | create\_routine\_priv | enum('n','y') | no | | n | | | alter\_routine\_priv | enum('n','y') | no | | n | | | create\_user\_priv | enum('n','y') | no | | n | | | ssl\_type | enum('','any','x509','specified') | no | | | | | ssl\_cipher | blob | no | | null | | | x509\_issuer | blob | no | | null | | | x509\_subject | blob | no | | null | | | max\_questions | int(11) unsigned | no | | 0 | | | max\_updates | int(11) unsigned | no | | 0 | | | max\_connections | int(11) unsigned | no | | 0 | | | max\_user\_connections | int(11) unsigned | no | | 0 | | +++++++ 37 rows in set (0.01 sec) mysql&gt; </code></pre><p>pro mysql 4.x získáte 31 sloupců</p><pre><code>mysql&gt; desc mysql.user; +++++++ | field | type | null | key | default | extra | +++++++ | host | varchar(60) binary | | pri | | | | user | varchar(16) binary | | pri | | | | password | varchar(16) binary | | | | | | select\_priv | enum('n','y') | | | n | | | insert\_priv | enum('n','y') | | | n | | | update\_priv | enum('n','y') | | | n | | | delete\_priv | enum('n','y') | | | n | | | create\_priv | enum('n','y') | | | n | | | drop\_priv | enum('n','y') | | | n | | | reload\_priv | enum('n','y') | | | n | | | shutdown\_priv | enum('n','y') | | | n | | | process\_priv | enum('n','y') | | | n | | | file\_priv | enum('n','y') | | | n | | | grant\_priv | enum('n','y') | | | n | | | references\_priv | enum('n','y') | | | n | | | index\_priv | enum('n','y') | | | n | | | alter\_priv | enum('n','y') | | | n | | | show\_db\_priv | enum('n','y') | | | n | | | super\_priv | enum('n','y') | | | n | | | create\_tmp\_table\_priv | enum('n','y') | | | n | | | lock\_tables\_priv | enum('n','y') | | | n | | | execute\_priv | enum('n','y') | | | n | | | repl\_slave\_priv | enum('n','y') | | | n | | | repl\_client\_priv | enum('n','y') | | | n | | | ssl\_type | enum('','any','x509','specified') | | | | | | ssl\_cipher | blob | | | | | | x509\_issuer | blob | | | | | | x509\_subject | blob | | | | | | max\_questions | int(11) unsigned | | | 0 | | | max\_updates | int(11) unsigned | | | 0 | | | max\_connections | int(11) unsigned | | | 0 | | +++++++ 31 rows in set (0.01 sec) </code></pre><p>představte si tento scénář:</p><ul> <li>nainstalujete 5.0</li> <li>odinstalujete 5.0</li> <li>zapomněli jste se přesunout/var/lib/mysql z cesty</li> <li>nainstalujete 5.1</li> </ul><p>uživatelská oprávnění se začnou posouvat. kdykoli spustíte <code>show grants;</code>, je obtížné očekávat sloupce na specifických místech v mysql.user (vzhledem k tomu, že mysql.user je myisam a jeho row\_format je dynamic (výchozí)). je velmi snadné vidět, jak uživatel náhle ztratí oprávnění, když znovu načtete verzi mysql 5.0 mysql.user do instance mysql 5.1.</p><p>v budoucnu, pokud byste se někdy rozhodli znovu načíst uživatele do mysql, zkuste uživatele výpisem do textového souboru pomocí <a href="http://www.percona.com/doc/percona-toolkit/2.0/pt-show-grants.html"><strong> pt-show-grantů </strong></a> spíše než mysqldump.</p><p>vlastně jsem psal svou vlastní verzi pt-show-grantů takto:</p><pre><code>mysql -hhostaddr -umyuserid -pmypassword --skip-column-names -a -e"select concat('show grants for ''',user,'''@''',host,''';') from mysql.user where user&lt;&gt;''" | mysql -hhostaddr -umyuserid -pmypassword --skip-column-names -a | sed 's/$/;/g' &gt; mysqlusergrants.sql </code></pre><p>tím vzniknou všechny uživatelské granty jako sql, což je mnohem přenosnější než standardní techniky mysql. jednoduše znovu načtěte skript sql a provedou se granty. samozřejmě, že takové překládky jsou kompatibilní pouze dopředu, nikdy zpět.</p> pokud se při výpočtu objeví následující chybová hláška: je třeba nainstalovat patch knihoven systému mfc8. link ke stažení: http://www.microsoft.com/downloads/details.aspx?familyid=766a6af7-ec73-40ff-b072-9112bab119c2&displaylang=en <p>testoval jsem několik různých algoritmů, měření rychlosti a počtu kolizí.</p><p>použil jsem tři různé sady klíčů:</p><ul> <li> <a href="http://www.sitopreferito.it/html/all\_english\_words.html">seznam 216 553 anglických slov</a> <sup> <a href="https://web.archive.org/web/20061231134037/http://www.sitopreferito.it/html/all\_english\_words.html">???? archiv</a> </sup>(malými písmeny)</li> <li>čísla <code>"1"</code> to <code>"216553"</code> (přemýšlejte o kódech zip a <a href="https://web.archive.org/web/20190119000003/https://blogs.msdn.microsoft.com/ericlippert/2003/09/19/arrrrr-capn-eric-be-learnin-about-threadin-the-harrrrd-way/">jak špatný hash stáhl msn.com</a> <sup> <a href="https://archive.ph/m7h87">???? archiv</a> </sup>)</li> <li>216 553 „náhodných“ (tj. <a href="http://www.ietf.org/rfc/rfc4122.txt">id typu 4</a> ) guid</li> </ul><p>pro každý korpus byl zaznamenán počet srážek a průměrná doba strávená hashováním.</p><p>testoval jsem:</p><ul> <li> <a href="http://www.cse.yorku.ca/~oz/hash.html">djb2</a> </li> <li> <a href="http://www.cse.yorku.ca/~oz/hash.html">djb2a</a> (varianta používající <code>xor</code> spíše než <code>+</code>)</li> <li> <a href="http://en.wikipedia.org/wiki/fowler%e2%80%93noll%e2%80%93vo\_hash\_function">fnv-1</a> (32-bit)</li> <li> <a href="http://en.wikipedia.org/wiki/fowler%e2%80%93noll%e2%80%93vo\_hash\_function">fnv-1a</a> (32-bit)</li> <li> <a href="http://www.cse.yorku.ca/~oz/hash.html"> sdbm </a> </li> <li>crc32</li> <li> <a href="http://en.wikipedia.org/wiki/murmurhash">murmur2</a> (32-bit)</li> <li> <a href="http://landman-code.blogspot.ca/2008/06/superfasthash-from-paul-hsieh.html">superfasthash</a> </li> </ul><h2>výsledek</h2><p>každý výsledek obsahuje průměrnou dobu hash a počet srážek</p><pre><code>hash lowercase random uuid numbers     murmur 145 ns 259 ns 92 ns 6 collis 5 collis 0 collis fnv-1a 152 ns 504 ns 86 ns 4 collis 4 collis 0 collis fnv-1 184 ns 730 ns 92 ns 1 collis 5 collis 0 collis▪ dbj2a 158 ns 443 ns 91 ns 5 collis 6 collis 0 collis▪▪▪ djb2 156 ns 437 ns 93 ns 7 collis 6 collis 0 collis▪▪▪ sdbm 148 ns 484 ns 90 ns 4 collis 6 collis 0 collis** superfasthash 164 ns 344 ns 118 ns 85 collis 4 collis 18742 collis crc32 250 ns 946 ns 130 ns 2 collis 0 collis 0 collis loselose 338 ns - - 215178 collis </code></pre><p><strong> poznámky </strong>:</p><ul> <li> <a href="http://www.cse.yorku.ca/~oz/hash.html">loselose algoritmus</a> (kde hash = hash + character) je skutečně <strong> <em> hrozné </em> </strong>. všechno se srazí do stejných 1375 kbelíků</li> <li>superfasthash je rychlý a věci vypadají docela rozptýleny; podle mého dobrota srážky <em> číslo </em>. doufám, že <a href="http://landman-code.blogspot.ca/2008/06/superfasthash-from-paul-hsieh.html">ten, kdo to přenesl, má něco špatného; je to docela špatné</a> </li> <li>crc32 je <em> celkem dobrá </em>. pomalejší a 1k tabulka vyhledávání</li> </ul><h2>dochází ke kolizím?</h2><p>ano. začal jsem psát svůj testovací program, abych zjistil, zda ke kolizím hashů <em> skutečně </em> došlo - a nejde jen o teoretický konstrukt. stávají se skutečně:</p><p><strong> fnv-1 srážky </strong></p><ul> <li><code>creamwove</code> srazí s <code>quists</code></li> </ul><p><strong> srážky fnv-1a </strong></p><ul> <li><code>costarring</code> srazí s <code>liquid</code></li> <li><code>declinate</code> srazí s <code>macallums</code></li> <li><code>altarage</code> srazí s <code>zinke</code></li> <li><code>altarages</code> srazí s <code>zinkes</code></li> </ul><p><strong> kolize murmur2 </strong></p><ul> <li><code>cataract</code> srazí s <code>periti</code></li> <li><code>roquette</code> srazí s <code>skivie</code></li> <li><code>shawl</code> srazí s <code>stormbound</code></li> <li><code>dowlases</code> srazí s <code>tramontane</code></li> <li><code>cricketings</code> srazí s <code>twanger</code></li> <li><code>longans</code> srazí s <code>whigs</code></li> </ul><p><strong> srážky djb2 </strong></p><ul> <li><code>hetairas</code> srazí s <code>mentioner</code></li> <li><code>heliotropes</code> srazí s <code>neurospora</code></li> <li><code>depravement</code> srazí s <code>serafins</code></li> <li><code>stylist</code> srazí s <code>subgenera</code></li> <li><code>joyful</code> srazí s <code>synaphea</code></li> <li><code>redescribed</code> srazí s <code>urites</code></li> <li><code>dram</code> srazí s <code>vivency</code></li> </ul><p><strong> srážky djb2a </strong></p><ul> <li><code>haggadot</code> srazí s <code>loathsomenesses</code></li> <li><code>adorablenesses</code> srazí s <code>rentability</code></li> <li><code>playwright</code> srazí s <code>snush</code></li> <li><code>playwrighting</code> srazí s <code>snushing</code></li> <li><code>treponematoses</code> srazí s <code>waterbeds</code></li> </ul><p><strong> kolize crc32 </strong></p><ul> <li><code>codding</code> srazí s <code>gnu</code></li> <li><code>exhibiters</code> srazí s <code>schlager</code></li> </ul><p><strong> kolize superfasthash </strong></p><ul> <li><code>dahabiah</code> srazí s <code>drapability</code></li> <li><code>encharm</code> srazí s <code>enclave</code></li> <li><code>grahams</code> srazí s <code>gramary</code></li> <li>... odstřihněte 79 kolizí ...</li> <li><code>night</code> srazí s <code>vigil</code></li> <li><code>nights</code> srazí s <code>vigils</code></li> <li><code>finks</code> srazí s <code>vinic</code></li> </ul><h2>náhodnost</h2><p>dalším subjektivním měřítkem je, jak náhodně jsou hash rozděleny. mapování výsledných tabulek ukazuje, jak rovnoměrně jsou data distribuována. všechny hašovací funkce vykazují dobré rozdělení při lineárním mapování tabulky:</p><p><img src="https://i.stack.imgur.com/bmysu.png" alt="enter image description here"></p><p>nebo jako <a href="http://en.wikipedia.org/wiki/hilbert\_curve"><em> hilbertova mapa </em></a> ( <a href="http://xkcd.com/195/">xkcd je vždy relevantní</a> ):</p><p><img src="https://i.stack.imgur.com/n8r3k.png" alt="enter image description here"></p><p>s výjimkou hashovacích řetězců čísel (<code>"1"</code>, <code>"2"</code>, ..., <code>"216553"</code>) (například <a href="https://web.archive.org/web/20190119000003/https://blogs.msdn.microsoft.com/ericlippert/2003/09/19/arrrrr-capn-eric-be-learnin-about-threadin-the-harrrrd-way/">psč</a> ), kde se ve většině hashovacích algoritmů začínají objevovat vzorce:</p><p><strong> [~ # ~] sdbm [~ # ~] </strong>:</p><p><img src="https://i.stack.imgur.com/1juxp.jpg" alt="enter image description here"></p><p><strong> djb2a </strong>:</p><p><img src="https://i.stack.imgur.com/0wjpn.jpg" alt="enter image description here"></p><p><strong> fnv-1 </strong>:</p><p><img src="https://i.stack.imgur.com/0f4l3.jpg" alt="enter image description here"></p><p>všechny kromě <strong> fnv-1a </strong>, které mi stále vypadají celkem náhodně:</p><p><img src="https://i.stack.imgur.com/wevjm.jpg" alt="enter image description here"></p><p>zdá se, že <strong> murmur2 </strong> má ještě lepší náhodnost s <code>numbers</code> než <code>fnv-1a</code>:</p><p><img src="https://i.stack.imgur.com/jywbf.png" alt="enter image description here"></p><blockquote> <p><em> když se podívám na <code>fnv-1a</code> "number" map, i <strong> think </strong> vidím jemné vertikální vzory. s murmurem nevidím vůbec žádné vzory. co si myslíte? </em></p> </blockquote><hr><p>extra <strong> <code>*</code> </strong> v tabulce označuje, jak špatná je náhodnost. s <code>fnv-1a</code> je nejlepší a <strong> <code>djb2x</code> </strong> je nejhorší:</p><pre><code> murmur2: . fnv-1a: . fnv-1: ▪ djb2: ▪▪ djb2a: ▪▪ sdbm: ▪▪▪ superfasthash: . crc: ▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪ loselose: ▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪ ▪ ▪▪▪▪▪▪▪▪▪▪▪▪▪ ▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪ ▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪ </code></pre><p>původně jsem napsal tento program, abych se rozhodl, jestli jsem dokonce musel <em> worry </em> o kolizích: ano.</p><p>a pak se ukázalo, že hashovací funkce byly dostatečně náhodné.</p><h2>algoritmus fnv-1a</h2><p>hash fnv1 přichází ve variantách, které vracejí 32, 64, 128, 256, 512 a 1024 bitů hashe.</p><p> <a href="http://en.wikipedia.org/wiki/fowler%e2%80%93noll%e2%80%93vo\_hash\_function">fnv-1a algoritmus</a> je:</p><pre><code>hash = fnv\_offset\_basis for each octetofdata to be hashed hash = hash xor octetofdata hash = hash * fnv\_prime return hash </code></pre><p>kde konstanty <code>fnv\_offset\_basis</code> a <code>fnv\_prime</code> záleží na požadované velikosti hash:</p><pre><code>hash size  32-bit prime: 2^24 + 2^8 + 0x93 = 16777619 offset: 2166136261 64-bit prime: 2^40 + 2^8 + 0xb3 = 1099511628211 offset: 14695981039346656037 128-bit prime: 2^88 + 2^8 + 0x3b = 309485009821345068724781371 offset: 144066263297769815596495629667062367629 256-bit prime: 2^168 + 2^8 + 0x63 = 374144419156711147060143317175368453031918731002211 offset: 100029257958052580907070968620625704837092796014241193945225284501741471925557 512-bit prime: 2^344 + 2^8 + 0x57 = 35835915874844867368919076489095108449946327955754392558399825615420669938882575126094039892345713852759 offset: 9659303129496669498009435400716310466090418745672637896108374329434462657994582932197716438449813051892206539805784495328239340083876191928701583869517785 1024-bit prime: 2^680 + 2^8 + 0x8d = 5016456510113118655434598811035278955030765345404790744303017523831112055108147451509157692220295382716162651878526895249385292291816524375083746691371804094271873160484737966720260389217684476157468082573 offset: 1419779506494762106872207064140321832088062279544193396087847491461758272325229673230371772250864096521202355549365628174669108571814760471015076148029755969804077320157692458563003215304957150157403644460363550505412711285966361610267868082893823963790439336411086884584107735010676915 </code></pre><p>podrobnosti viz <a href="http://www.isthe.com/chongo/tech/comp/fnv/index.html#fnv-param">hlavní stránka fnv</a> .</p><p>všechny mé výsledky jsou u 32bitové varianty.</p><h2>fnv-1 lepší než fnv-1a?</h2><p>ne. fnv-1a je všude lepší. při použití korpusu anglického slova došlo k dalším kolizím s fnv-1a:</p><pre><code>hash word collisions   fnv-1 1 fnv-1a 4 </code></pre><p>nyní porovnejte malá a velká písmena:</p><pre><code>hash lowercase word collisions uppercase word collisions    fnv-1 1 9 fnv-1a 4 11 </code></pre><p>v tomto případě fnv-1a není <em> "400%" </em> horší než fn-1, pouze o 20% horší.</p><p>myslím, že důležitější s sebou je, že existují dvě třídy algoritmů, pokud jde o kolize:</p><ul> <li><strong> vzácné srážky </strong>: fnv-1, fnv-1a, djb2, djb2a, sdbm</li> <li><strong> běžné srážky </strong>: superfasthash, loselose</li> </ul><p>a pak je tu, jak rovnoměrně jsou hashe:</p><ul> <li><strong> vynikající distribuce: </strong> murmur2, fnv-1a, superfasthas</li> <li><strong> vynikající distribuce: </strong> fnv-1</li> <li><strong> dobrá distribuce: </strong> sdbm, djb2, djb2a</li> <li><strong> hrozné rozdělení: </strong> loselose</li> </ul><hr><p><strong> aktualizace </strong></p><p>mumlání? <em> jistě, proč ne </em></p><hr><p><strong> aktualizace </strong></p><p>@whatshisname přemýšlel, jak by <strong> crc32 </strong> provedl přidaná čísla do tabulky.</p><p>crc32 je <em> celkem dobrá </em>. několik kolizí, ale pomalejší, a režie 1k tabulky vyhledávání.</p><p><em> vystřihněte všechny chybné informace o distribuci crc - můj špatný </em></p><hr><p>až do dneška jsem měl v úmyslu používat fnv-1a jako můj <em> de facto </em> hash-hashovací algoritmus tabulky. ale teď přecházím na murmur2:</p><ul> <li>rychleji</li> <li>lepší <em> randomnessification </em> všech tříd vstupů</li> </ul><p>a opravdu, <em> opravdu </em> doufám, že je něco špatného s <a href="http://landman-code.blogspot.ca/2008/06/superfasthash-from-paul-hsieh.html"><code>superfasthash</code> algoritmus, který jsem našel</a> ; je příliš špatné na to, aby byl tak populární, jak je.</p><p><strong> aktualizace: </strong> z <a href="http://code.google.com/p/smhasher/wiki/murmurhash3">domovská stránka murmurhash3 na googl</a> :</p><blockquote> <p>(1) - superfasthash má velmi špatné kolizní vlastnosti, které byly dokumentovány jinde.</p> </blockquote><p>takže to nejsem jen já.</p><p><strong> aktualizace: </strong> uvědomil jsem si, proč je <code>murmur</code> rychlejší než ostatní. murmurhash2 pracuje na čtyřech bytech najednou. většina algoritmů je <em> byte byte </em>:</p><pre><code>for each octet in key addtheoctettothehash </code></pre><p>to znamená, že jak se klíče prodlužují, murmur dostane svou šanci září.</p><hr><p><strong> aktualizace </strong></p><h2> <a href="http://blogs.msdn.com/b/oldnewthing/archive/2012/05/23/10309199.aspx">guid jsou navrženy tak, aby byly jedinečné, nikoli náhodné</a> </h2><p>včasný příspěvek od raymonda chena opakuje skutečnost, že guid <em> "random" </em> guid nejsou určeny pro jejich náhodnost. oni nebo jejich podmnožina jsou nevhodní jako hashovací klíč:</p><blockquote> <p>ani u verze 4 guid algoritmus není zaručeno, že bude nepředvídatelný, protože tento algoritmus nespecifikuje kvalitu generátoru náhodných čísel. <a href="http://en.wikipedia.org/wiki/globally\_unique\_identifier">článek wikipedia pro guid obsahuje primární výzkum, který navrhuje</a> , že budoucí a předchozí guid lze předpovídat na základě znalosti stavu generátoru náhodných čísel, protože generátor není kryptograficky silný.</p> </blockquote><p>náhodnost není totéž jako vyhýbání se kolizi; což je důvod, proč by bylo chybou pokusit se vymyslet svůj vlastní „hashovací“ algoritmus tím, že vezme nějakou podskupinu „náhodného“ průvodce:</p><pre><code>int hashkeyfromguid(guid type4uuid) { //a "4" is put somewhere in the guid. //i can't remember exactly where, but it doesn't matter for //the illustrative purposes of this pseudocode int guidversion = ((type4uuid.d3 &amp; 0x0f00) &gt;&gt; 8); assert(guidversion == 4); return (int)getfirstfourbytesofguid(type4uuid); } </code></pre><p><strong> poznámka </strong>: znovu jsem v uvozovkách uvedl <em> "náhodné guid" </em>, protože se jedná o "náhodnou" variantu guid. přesnější popis by byl <code>type 4 uuid</code>. ale nikdo neví, co je typu 4 nebo typu 1, 3 a 5. takže je to jednodušší nazvat je „náhodnými“ guid.</p><h1>všechna anglická slova zrcadla</h1><ul> <li> <a href="https://web.archive.org/web/20070221060514/http://www.sitopreferito.it/html/all\_english\_words.html">https://web.archive.org/web/20070221060514/http://www.sitopreferito.it/html/all\_english\_words.html</a> </li> <li> <a href="https://drive.google.com/file/d/0b3blwu7vb2u-dew1vkuxc3u4sg8/view?usp=sharing">https://drive.google.com/file/d/0b3blwu7vb2u-dew1vkuxc3u4sg8/view?usp=sharing</a> </li> </ul> <p><em> aktualizovat: chrome 58+ skryl tyto a další ladicí zprávy ve výchozím nastavení. chcete-li je zobrazit, klepněte na šipku vedle položky „info&ldquo; a vyberte položku „verbose&ldquo;. </em></p><p><em> aktualizace 2: chrome 57 je ve výchozím nastavení zapnut. chcete-li je znovu zapnout, musíte povolit filtry a zrušit zaškrtnutí políčka „skrýt porušení&ldquo;. </em></p><blockquote> <p>najednou se objeví, když se do projektu zapojí někdo jiný</p> </blockquote><p>myslím, že je to více pravděpodobné, že jste aktualizovali na chrome 56. toto varování je (imo) báječná nová funkce - prosím, vypněte ji pouze v případě, že jste zoufalí a váš hodnotitel vás odtrhne. základní problémy jsou v jiných prohlížečích, ale prohlížeče vám neříkají, že je problém. vstupenka chromium je zde, ale na ní není žádná zajímavá diskuse: <a href="https://bugs.chromium.org/p/chromium/issues/detail?id=662497">https://bugs.chromium.org/p/chromium/issues/detail?id=662497</a> </p><p>tyto zprávy jsou varování namísto chyb, protože to opravdu nebude způsobovat velké problémy. to může způsobit upuštění rámců nebo jinak způsobit méně hladký zážitek.</p><p>stojí za to prozkoumat a upevnit, aby se zvýšila kvalita vaší aplikace. způsob, jak toho dosáhnout, je věnovat pozornost okolnostem, ve kterých se zprávy zobrazují, a provádět testování výkonu, aby se zúžit, kde se problém vyskytuje. nejjednodušším způsobem, jak spustit testování výkonu, je vložit nějaký kód takto:</p><pre><code>function somemethodithinkmightbeslow() { const starttime = performance.now(); // do the normal stuff for this function const duration = performance.now() - starttime; console.log(`somemethodithinkmightbeslow took ${duration}ms`); } </code></pre><p>chcete-li být pokročilejší, můžete také použít profiler chrome: <a href="https://developers.google.com/web/tools/chrome-devtools/rendering-tools/">https://developers.google.com/web/tools/chrome-devtools/rendering-tools/</a> </p><p>nebo použijte knihovnu benchmarking, jako je tato: <a href="https://benchmarkjs.com/">https://benchmarkjs.com/</a> </p><p>jakmile najdete nějaký kód, který trvá dlouhou dobu (50 ms je práh chrome), máte několik možností:</p><ol> <li>vystřihněte některé z těchto úkolů, které mohou být zbytečné</li> <li>zjistěte, jak dělat stejný úkol rychleji</li> <li>rozdělte kód do několika asynchronních kroků</li> </ol><p>(1) a (2) může být obtížné nebo nemožné. ale někdy je to opravdu snadné a měly by to být vaše první pokusy. v případě potřeby by mělo být vždy možné (3). k tomu budete používat něco jako</p><pre><code>settimeout(functiontorunverysoonbutnotnow); </code></pre><p>nebo</p><pre><code>// this one is not available natively in ie, but there are polyfills available. promise.resolve().then(functiontorunverysoonbutnotnow); </code></pre><p>více o asynchronní povaze javascriptu si můžete přečíst zde:</p><p> <a href="http://blog.carbonfive.com/2013/10/27/the-javascript-event-loop-explained/">http://blog.carbonfive.com/2013/10/27/the-javascript-event-loop-explained/</a> </p> <p><strong> poznámka: </strong> <em>toto bylo testováno na notebooku s grafickou kartou řízenou i915.</em></p><hr><h3>pozadí</h3><p><strong> poznámka: </strong> když je připojena nová obrazovka, do hostitele není odeslána žádná událost, zůstane to pravda i po mé poslední úpravě. jediným způsobem je tedy použít dotazování. snažím se, aby byly co nejefektivnější ...</p><h3>úprava # 3</h3><p>nakonec existuje jedno lepší řešení (prostřednictvím acpi):</p><p>stále neexistuje žádná událost, ale acpi se zdá být efektivnější než <code>xrandr</code> na dotaz. (poznámka: toto <strong> vyžaduje </strong> načtené moduly jádra acpi, ale nevyžaduje oprávnění root.</p><p>moje konečné řešení (pomocí bash):</p><pre><code>isvgaconnected() { local crtstate read -a &lt; /proc/acpi/video/vid/crt0/state crtstate test $(( ( ${crtstate[1]} &gt;&gt;4 ) ${1:+*-1+1} )) -ne 0 } </code></pre><p>nyní test:</p><pre><code>$ if isvgaconnected; then echo yes; else echo no; fi yes </code></pre><p>je zapojen, takže ho nyní odpojím:</p><pre><code>$ if isvgaconnected; then echo yes; else echo no; fi no </code></pre><p><strong> poznámka: </strong> <code>${1:+*-1+1}</code> povolit argument <em>boolean</em>: pokud <em>něco je přítomno</em>, odpověď by byla obrácena: <code>( crtstate &gt;&gt; 4 ) * -1 + 1</code>.</p><p>a závěrečný skript:</p><pre><code>#!/bin/bash export crtprocentry=/proc/acpi/video/vid/crt0/state isvgaconnected() { local crtstate read -a &lt; $crtprocentry crtstate test $(( ( ${crtstate[1]} &gt;&gt;4 ) ${1:+*-1+1} )) -ne 0 } delay=.1 unset switch isvgaconnected || switch=not while :;do while isvgaconnected $switch;do sleep $delay done if [ "$switch" ];then unset switch echo vga is connected # doing something while vga is connected else switch=not echo vga is not connected. # doing something else, maybe. fi done </code></pre><p><strong> upozornění: </strong> <em>lehčí než <code>xrandr</code>, ale ne nevýznamné</em> se zpožděním menším než <em>,02</em> sekund, bash skript půjde na začátek procesu jedlíci zdrojů (<code>top</code>)!</p><p>i když to stojí ~ 0,001 s:</p><pre><code>$ time read -a &lt;/proc/stat crtstat </code></pre><p>vyžaduje to ~ 0,030 s:</p><pre><code>$ read -a &lt; /proc/acpi/video/vid/crt0/state crtstate </code></pre><p>to je velké! takže v závislosti na tom, co potřebujete, lze <code>delay</code> rozumně nastavit mezi <code>0.5</code> a <code>2</code>.</p><h3>úprava # 2</h3><p>nakonec jsem něco našel:</p><p><strong> důležité vyloučení odpovědnosti: </strong> hraní s <code>/proc</code> a <code>/sys</code> záznamy mohou poškodit váš systém !!! takže na produkčních systémech nezkoušejte následující.</p><pre><code>mapfile watchfilelist &lt; &lt;( find /sys /proc -type f 2&gt;/dev/null | grep -i acpi\\\|i91 ) prompt=("/" "|" '\' '-'); l=0 while :; do mapfile watchstat &lt; &lt;( grep -h . ${watchfilelist[@]} 2&gt;/dev/null ) for ((i=0;i&lt;=${#watchstat[@]};i++)); do [ "${watchstat[i]}" == "${oldstat[i]}" ] || echo ${watchstat[i]} done oldstat=("${watchstat[@]}") sleep .5 printf "\r%s\r" ${prompt[l++]} [ $l -eq 4 ]&amp;&amp;l=0 done </code></pre><p>... po očištění nežádoucích záznamů:</p><pre><code>for ((i=0;i&lt;=${#watchfilelist[@]};i++)); do [[ "${watchfilelist[$i]}" =~ /sys/firmware/acpi/interrupts/sci ]] &amp;&amp; unset watchfilelist[$i] &amp;&amp; echo $i done </code></pre><p>to jsem dokázal přečíst:</p><pre><code>/proc/acpi/video/vid/crt0/state:state: 0x1d /proc/acpi/video/vid/crt0/state:state: 0x0d /proc/acpi/video/vid/crt0/state:state: 0x1d </code></pre><p>když připojím, odpojte a znovu zapojte kabel monitoru.</p><p>při dotazu na konfiguraci (spuštění <code>system/preferences/monitor</code> nebo <code>xrandr</code>), grafické karty udělají typ <em>scan</em>, takže běží <code>xrandr -q</code> vám dá informace, ale musíte zjistit stav.</p><p>prohledal jsem všechny protokoly (jádro, démona, x atd.) prohledávajícím <code>/proc</code> &amp; <code>/sys</code> a zjevně se zdá, že neexistuje nic, co by vyhovovalo vaší žádosti.</p><p>zkusil jsem to také:</p><pre><code>export spc50="$(printf "%50s" "")" watch -n1 ' find /proc/acpi/video -type f | xargs grep -h . | sed "s/^\([^:]*):/\1'$spc50'}:/; s/^\(.\{50\}\) *:/\1 /"' </code></pre><p>po tom všem, když spustíte <code>system/preferences/monitor</code> zatímco nebyla připojena žádná nová obrazovka ani odpojena, bude se nástroj zobrazovat jednoduše (normálně). ale pokud jste již dříve připojili nebo odpojili obrazovku, občas spustíte tento nástroj a uvidíte, že na ploše vytvoříte typ <em>reset</em> ​​nebo <em>obnovit</em> ​​(stejný pokud spustíte <code>xrandr</code>).</p><p>zdá se, že to potvrzuje, že tento nástroj požádá o <code>xrandr</code> (nebo pracuje stejným způsobem) pravidelným dotazováním na stav, počínaje okamžikem jeho spuštění.</p><p>můžete vyzkoušet sami:</p><pre><code>$ for ((i=10;i--;)); do xrandr -q | grep ' connected' | wc -l; sleep 1; done 1 1 1 2 2 2 1 1 1 1 </code></pre><p>tím se na 10 sekund zobrazí počet připojených obrazovek (displejů).</p><p>zatímco to běží, připojte a/nebo odpojte obrazovku/monitor a podívejte se, co se děje. takže byste mohli vytvořit malou testovací funkci bash:</p><pre><code>isvgaconnected() { local xrandr=$(xrandr -q) [ "$xrandr" == "${xrandr#*vga1 con}" ] || return 0 return 1 } </code></pre><p>který by byl použitelný jako v:</p><pre><code>$ if isvgaconnected; then echo yes; fi </code></pre><p>ale buďte opatrní, <code>xrandr</code> trvá asi <strong> 0,140 s do 0.200 s </strong>, zatímco na zástrčkách nedojde k žádné změně a do <strong> 0,770 sekund </strong> kdykoli něco bylo připojeno nebo odpojeno těsně před (<strong> poznámka: </strong> zdá se, že to není zdrojový zdroj).</p><h3>úprava # 1</h3><p>abych zajistil, že neučím něco nesprávného, ​​prohledával jsem web a dokumenty, ale nenašel jsem nic o <em>dbus and screens</em>.</p><p>nakonec jsem běžel ve dvou různých oknech <code>dbus-monitor --system</code> (hrál jsem také s možnostmi) a malý skript, který jsem napsal:</p><pre><code>$ for ((i=1000;i--;)); do isvgaconnected &amp;&amp; echo yes || echo no; sleep .5; done </code></pre><p>... a znovu zapojen, než odpojen monitor, mnohokrát. takže teď mohu říci:</p><ul> <li><em>v této konfiguraci <strong> pomocí ovladače i915 </strong> neexistuje jiný způsob, než spustit <code>xrandr -q</code> vědět, zda je monitor připojen nebo ne.</em></li> </ul><p>ale buďte opatrní, protože se nejeví jiné způsoby. například se zdá, že <code>xrandr</code> tyto informace sdílí, takže moje plocha gnome by se automaticky přepnula na <code>xinerama</code> automaticky ... <strong>, když jsem běžel <code>xrandr</code> </strong>.</p><h3>některé dokumenty</h3><ul> <li> <a href="https://wiki.archlinux.org/index.php/xrandr#toggle\_external\_monitor">skript pro přepínání interního/externího displeje pro notebooky</a> </li> <li> <a href="http://www.x.org/docs/intel/hd/ihd\_os\_vol\_3\_part4\_bjs.pdf">®intel hd graphics opensource programmer's reference manual</a> </li> </ul> Pravděpodobně budete chtít používat [Eclipse C / C ++ Development Nástroje (CDT)](http://www.eclipse.org/cdt/) plugin. <p>v plánech provádění byste se neměli příliš spoléhat na procenta nákladů. jedná se o <em> vždy odhadované náklady</em>, a to i v plánech po provedení s „skutečnými“ čísly pro věci, jako je počet řádků. odhadované náklady jsou založeny na modelu, který funguje velmi dobře pro účel, pro který je určen: umožnění optimalizátoru zvolit mezi různými plány provádění kandidátů pro stejný dotaz. informace o nákladech jsou zajímavé a faktor, který je třeba zvážit, ale zřídka by měla být primární metrikou pro ladění dotazů. interpretace informací plánu provádění vyžaduje širší pohled na prezentovaná data.</p><p><strong> itemtran clustered index seek operator </strong></p><p><img src="https://i.stack.imgur.com/lvet6.jpg" alt="itemtran clustered index seek"></p><p>tento operátor jsou skutečně dvě operace v jednom. nejprve operace vyhledávání indexu najde všechny řádky, které odpovídají predikátu <code>product\_code\_v42 = 'm10bolt'</code>, pak každý řádek použije zbytkový predikát <code>bit\_field\_v41 &amp; 4 = 0</code>. dochází k implicitní konverzi <code>bit\_field\_v41</code> z jejího základního typu (<code>tinyint</code> nebo <code>smallint</code>) na <code>integer</code>.</p><p>k převodu dochází, protože <a href="https://msdn.microsoft.com/en-us/library/ms174965.aspx">bitový operátor and</a> (&amp;) vyžaduje, aby oba operandy byly stejného typu. implicitní typ konstantní hodnoty '4' je celé číslo a <a href="https://msdn.microsoft.com/en-us/library/ms190309.aspx">pravidla priority datového typ</a> znamená, že je převedena hodnota pole <code>bit\_field\_v41</code> s nižší prioritou.</p><p>problém (jako je) se snadno opraví zápisem predikátu jako <code>bit\_field\_v41 &amp; convert(tinyint, 4) = 0</code> - což znamená, že konstantní hodnota má nižší prioritu a je převedena (během konstantního skládání) spíše než hodnota sloupce. pokud je <code>bit\_field\_v41</code> <code>tinyint</code>, nedojde k žádné konverzi. podobně lze použít funkci <code>convert(smallint, 4)</code>, pokud <code>bit\_field\_v41</code> je <code>smallint</code>. to znamená, že v tomto případě <em> převod není problém s výkonem</em>, ale stále je dobrým zvykem porovnávat typy a vyhýbat se implicitním převodům tam, kde je to možné.</p><p>hlavní část odhadovaných nákladů na toto hledání je až do velikosti základní tabulky. zatímco seskupený klíč indexu je sám o sobě poměrně úzký, velikost každého řádku je velká. definice tabulky není uvedena, ale pouze sloupce použité v pohledu přidávají významnou šířku řádku. protože seskupený index zahrnuje všechny sloupce, vzdálenost mezi seskupenými klíči indexu je šířka <em> řádek</em>, nikoli šířka <em> indexové klíče</em>. použití přípon přípon verzí v některých sloupcích naznačuje, že skutečná tabulka obsahuje ještě více sloupců pro předchozí verze.</p><p>když se podíváme na sloupce vyhledávání, zbytkového predikátu a výstupu, výkon tohoto operátora lze zkontrolovat izolovaně vytvořením ekvivalentního dotazu (<code>1 &lt;&gt; 2</code> je trik, který zabraňuje auto-parametrizaci, rozpor je odstraněn optimalizátorem a nezobrazí se v plánu dotazů):</p><pre><code>select it.booking\_no\_v32, it.qtycheckedout, it.qtyreturned, it.trans\_qty, it.trans\_type\_v41 from dbo.tblitemtran as it where 1 &lt;&gt; 2 and it.product\_code\_v42 = 'm10bolt' and it.bit\_field\_v41 &amp; convert(tinyint, 4) = 0; </code></pre><p>výkon tohoto dotazu se studenou datovou mezipamětí je zajímavý, protože čtení (forward) by bylo ovlivněno fragmentací tabulky (seskupený index). klastrovací klíč pro tuto tabulku vyzývá k fragmentaci, takže by mohlo být důležité tento index pravidelně udržovat (reorganizovat nebo znovu sestavovat) a pomocí vhodného <code>fillfactor</code> umožnit místo pro nové řádky mezi okny údržby indexů.</p><p>provedl jsem test účinku fragmentace na čtení předem pomocí vzorových dat generovaných pomocí <a href="https://www.red-gate.com/products/sql-development/sql-data-generator/">sql data generator</a> . při použití stejného počtu řádků tabulky, jaké jsou uvedeny v plánu dotazů na otázku, vyústil vysoce fragmentovaný klastrovaný index do <code>select * from view</code> po 15 sekundách po <code>dbcc dropcleanbuffers</code>. stejný test za stejných podmínek s čerstvě obnoveným seskupeným indexem v tabulce itemtrans byl dokončen za 3 sekundy.</p><p>pokud jsou data tabulky obvykle zcela v mezipaměti, je problém fragmentace mnohem méně důležitý. ale i při nízké fragmentaci mohou široké řádky tabulky znamenat, že počet logických a fyzických čtení je mnohem vyšší, než by se dalo očekávat. můžete také experimentovat s přidáním a odebráním explicitního <code>convert</code>, abyste potvrdili mé očekávání, že implicitní problém s převodem zde není důležitý, s výjimkou porušení doporučených postupů.</p><p>více k tomuto bodu je odhadovaný počet řádků opouštějících operátora vyhledávání. odhad času optimalizace je 165 řádků, ale v době provedení bylo vyrobeno 4 226 kusů. k tomuto bodu se vracím později, ale hlavním důvodem nesrovnalosti je to, že selektivita zbytkového predikátu (zahrnující bitový-and) je pro optimalizátor velmi obtížná předvídat - ve skutečnosti se uchyluje k hádání.</p><p><strong> operátor filtru </strong></p><p><img src="https://i.stack.imgur.com/mayng.jpg" alt="filter operator"></p><p>zobrazuji zde predikát filtru většinou, abych ilustroval, jak jsou dva seznamy <code>not in</code> kombinovány, zjednodušeny a poté rozšířeny, a také poskytuji odkaz pro následující diskusi o hašovacích zápasech. testovací dotaz z požadavku lze rozšířit tak, aby zahrnoval jeho účinky a určoval vliv operátora filtru na výkon:</p><pre><code>select it.booking\_no\_v32, it.trans\_type\_v41, it.trans\_qty, it.qtyreturned, it.qtycheckedout from dbo.tblitemtran as it where it.product\_code\_v42 = 'm10bolt' and it.bit\_field\_v41 &amp; convert(tinyint, 4) = 0 and ( ( it.trans\_type\_v41 not in (2, 3, 6, 7, 18, 19, 20, 21, 12, 13, 22) and it.trans\_type\_v41 not in (6, 7) ) or ( it.trans\_type\_v41 not in (6, 7) ) or ( it.trans\_type\_v41 in (6, 7) and it.qtycheckedout = 0 ) or ( it.trans\_type\_v41 in (6, 7) and it.qtycheckedout &gt; 0 and it.trans\_qty - (it.qtycheckedout - it.qtyreturned) &gt; 0 ) ); </code></pre><p>operátor compute scalar v plánu definuje následující výraz (samotný výpočet je odložen, dokud není výsledek vyžadován pozdějším operátorem):</p><pre><code>[expr1016] = (trans\_qty - (qtycheckedout - qtyreturned)) </code></pre><p><strong> hash match operator </strong></p><p>provádění spojení na datových typech znaků není důvodem vysokých odhadovaných nákladů tohoto operátora. popis ssms zobrazuje pouze položku hash keys probe probe, ale důležité detaily jsou v okně ssms properties.</p><p>operátor hash match vytvoří hašovací tabulku s použitím hodnot ve sloupci <code>booking\_no\_v32</code> (build hash keys!) z tabulky itemtran a poté zkoumá shody pomocí sloupce <code>booking\_no</code> (hash keys probe) od tabulka rezervace. popisek ssms by také normálně zobrazoval zbytky sondy, ale text je příliš dlouhý na popis a je jednoduše vynechán.</p><p>rezidua sondy je podobná zbytku pozorovanému po hledání indexu dříve; zbytkový predikát je vyhodnocen na všech řádcích, které hash odpovídají, aby se určilo, zda by měl být řádek předán nadřazenému operátorovi. nalezení hash zápasů v dobře vyvážené hashovací tabulce je extrémně rychlé, ale použití komplexního zbytkového predikátu na každý řádek, který odpovídá, je při porovnání poměrně pomalé. popisek hash match v aplikaci plan explorer zobrazuje podrobnosti, včetně zbytkového výrazu probe:</p><p><img src="https://i.stack.imgur.com/c1nkp.jpg" alt="hash match operator"></p><p>zbytkový predikát je složitý a zahrnuje kontrolu stavu průběhu rezervace, když je sloupec k dispozici v tabulce rezervací. popisek také ukazuje stejný nesoulad mezi odhadovanými a skutečnými počty řádků viděnými dříve v hledání indexu. může se zdát podivné, že většina filtrování se provádí dvakrát, ale je to jen optimistický optimalizátor. neočekává, že části filtru, které lze posunout dolů ze zbytku sondy, odstraní všechny řádky (odhady počtu řádků jsou před a za filtrem stejné), ale optimalizátor ví, že by to mohlo být špatné. pravděpodobnost brzkého filtrování řádků (snížení nákladů na spojení hash) stojí za malou cenu extra filtru. celý filtr nelze posunout dolů, protože obsahuje test na sloupci z tabulky rezervací, ale většinou to může být. úplný test je stále vyžadován v testu zbytkové hodnoty hash pro správnost.</p><p>podceňování počtu řádků je problém pro operátora hash match, protože množství paměti rezervované pro hashovací tabulku je založeno na odhadovaném počtu řádků. pokud je paměť příliš malá pro velikost hashovací tabulky požadované v době běhu (kvůli většímu počtu řádků), hashova tabulka <strong> rekurzivně rozlévá </strong> na fyzickou <em> tempdb</em> úložiště, což často vede k velmi slabému výkonu. v nejhorším případě prováděcí motor zastaví rekurzivní rozlití hashovacích kbelíků a uchytí se k algoritmu <em> velmi pomalý</em> rozlití hash (rekurzivní nebo záchranná opatření) je nejpravděpodobnější příčinou problémů s výkonem nastíněných v otázce (nikoli sloupců spojení typu nebo implicitních konverzí). hlavní příčinou by byl server rezervující příliš málo paměti pro dotaz na základě nesprávného odhadu počtu řádků (kardinality).</p><p>je smutné, že před sql server 2012 není v plánu provádění naznačeno, že operace hašování překročila přidělení paměti (které nemůže být dynamicky růst po rezervování před spuštěním spuštění, i když má server velké množství volné paměti) a musela se přelít do tempdb. je možné monitorovat <a href="https://msdn.microsoft.com/en-us/library/ms190736.aspx">hash warning event class</a> pomocí profiler, ale může být obtížné korelovat varování s konkrétním dotazem.</p><p><strong> oprava problémů </strong></p><p>těmito třemi problémy jsou fragmentace, zbytková složka sondy v operátorovi hašovací shody a nesprávný odhad mohutnosti vyplývající z hádání při hledání indexu.</p><p><strong> doporučené řešení </strong></p><p>zkontrolujte fragmentaci a v případě potřeby ji opravte, naplánujte údržbu tak, aby index zůstal přijatelně organizovaný. obvyklý způsob, jak opravit odhad kardinality, je poskytnout statistiku. v takovém případě optimalizátor potřebuje statistiku kombinace (<code>product\_code\_v42</code>, <code>bitfield\_v41 &amp; 4 = 0</code>). nemůžeme vytvořit statistiky výrazu přímo, takže musíme nejprve vytvořit vypočítaný sloupec pro výraz bitového pole a poté vytvořit manuální statistiku více sloupců:</p><pre><code>alter table dbo.tblitemtran add bit3 as bit\_field\_v41 &amp; convert(tinyint, 4); create statistics [stats dbo.itemtran (product\_code\_v42, bit3)] on dbo.tblitemtran (product\_code\_v42, bit3); </code></pre><p>definice vypočteného sloupcového textu se musí přesně shodovat s textem v definici pohledu, aby se statistika mohla použít, takže by se mělo korigovat zobrazení, aby se vyloučila implicitní konverze, a současně by se mělo dbát na to, aby byla zajištěna shoda textu.</p><p>statistiky ve více sloupcích by měly vést k mnohem lepším odhadům, což výrazně snižuje pravděpodobnost, že operátor hashovací metody použije rekurzivní rozlití nebo algoritmus výpomoci. přidání vypočítaného sloupce (což je operace pouze s metadaty a nezabere žádné místo v tabulce, protože není označeno <code>persisted</code>) a statistika více sloupců je můj nejlepší odhad při prvním řešení.</p><p>při řešení problémů s výkonem dotazů je důležité měřit věci jako uplynulý čas, využití procesoru, logická čtení, fyzická čtení, typy čekání a doby trvání atd. atd. může být také užitečné spustit části dotazu samostatně pro ověření podezření na příčiny, jak je uvedeno výše.</p><p>v některých prostředích, kde není nejdůležitější pohled na data, může být užitečné spustit proces na pozadí, který zhmotňuje celý pohled do tabulky snímků každou tak často. tato tabulka je pouze normální základní tabulka a lze ji indexovat pro čtení dotazů, aniž byste se museli starat o dopad na výkon aktualizace.</p><p><strong> zobrazit indexování </strong></p><p>nenechte se v pokušení přímo indexovat původní pohled. výkon čtení bude úžasně rychlý (jediné hledání v pohledu indexu), ale (v tomto případě) budou všechny problémy s výkonem ve stávajících plánech dotazů přeneseny do dotazů, které upravují všechny sloupce tabulky, na které se v pohledu odkazuje. dotazy, které mění řádky základní tabulky, budou skutečně ovlivněny velmi špatně.</p><p><strong> pokročilé řešení s částečným indexovaným pohledem </strong></p><p>pro tento konkrétní dotaz existuje částečné řešení indexovaného pohledu, které opravuje odhady kardinality a odstraňuje zbytky filtru a sondy, ale je založeno na některých předpokladech o datech (většinou můj odhad na schématu) a vyžaduje odbornou implementaci, zejména pokud jde o vhodné indexy pro podporu plánů údržby indexovaných pohledů. sdílím níže uvedený kód pro zájem, nenavrhuji, abyste jej implementovali bez <em> velmi opatrní</em> analýzy a testování.</p><pre><code>-- indexed view to optimize the main view create view dbo.v1 with schemabinding as select it.id, it.product\_code\_v42, it.trans\_type\_v41, it.booking\_no\_v32, it.trans\_qty, it.qtyreturned, it.qtycheckedout, it.qtyreserved, it.bit\_field\_v41, it.prep\_on, it.from\_locn, it.trans\_to\_locn, it.pdate, it.firstdate, it.ptimeh, it.ptimem, it.retndate, it.bookdate, it.timebookedh, it.timebookedm, it.timebookeds, it.del\_time\_hour, it.del\_time\_min, it.return\_to\_locn, it.return\_time\_hour, it.return\_time\_min, it.assignto, it.assigntype, it.inrack from dbo.tblitemtran as it join dbo.tblbookings as tb on tb.booking\_no = it.booking\_no\_v32 where ( it.trans\_type\_v41 not in (2, 3, 7, 18, 19, 20, 21, 12, 13, 22) and it.trans\_type\_v41 not in (6, 7) and it.bit\_field\_v41 &amp; convert(tinyint, 4) = 0 ) or ( it.trans\_type\_v41 not in (6, 7) and it.bit\_field\_v41 &amp; convert(tinyint, 4) = 0 and tb.bookingprogressstatus = 1 ) or ( it.trans\_type\_v41 in (6, 7) and it.bit\_field\_v41 &amp; convert(tinyint, 4) = 0 and it.qtycheckedout = 0 ) or ( it.trans\_type\_v41 in (6, 7) and it.bit\_field\_v41 &amp; convert(tinyint, 4) = 0 and it.qtycheckedout &gt; 0 and it.trans\_qty - (it.qtycheckedout - it.qtyreturned) &gt; 0 ); go create unique clustered index cuq on dbo.v1 (product\_code\_v42, id); go </code></pre><p>existující pohled se vyladil, aby používal indexované zobrazení výše:</p><pre><code>create view [dbo].[vwreallyslowview2] as select i.booking\_no\_v32 as bkno, i.trans\_type\_v41 as trantype, b.assigned\_to\_v61 as assignbk, b.order\_date as dateo, b.hourbooked as hbooked, b.minbooked as mbooked, b.secbooked as sbooked, i.prep\_on as pon, i.from\_locn as flocn, i.trans\_to\_locn as ttlocn, case i.prep\_on when 'y' then i.pdate else i.firstdate end as prdate, i.ptimeh as prtimeh, i.ptimem as prtimem, case when i.retndate &lt; i.firstdate then i.firstdate else i.retndate end as rdatev, i.bit\_field\_v41 as bitfield, i.firstdate as fdatev, i.bookdate as dbooked, i.timebookedh as tbookh, i.timebookedm as tbookm, i.timebookeds as tbooks, i.del\_time\_hour as dth, i.del\_time\_min as dtm, i.return\_to\_locn as rtlocn, i.return\_time\_hour as rth, i.return\_time\_min as rtm, case when i.trans\_type\_v41 in (6, 7) and i.trans\_qty &lt; i.qtycheckedout then 0 when i.trans\_type\_v41 in (6, 7) and i.trans\_qty &gt;= i.qtycheckedout then i.trans\_qty - i.qtycheckedout else i.trans\_qty end as trqty, case when i.trans\_type\_v41 in (6, 7) then 0 else i.qtycheckedout end as myqtycheckedout, case when i.trans\_type\_v41 in (6, 7) then 0 else i.qtyreturned end as retqty, i.id, b.bookingprogressstatus as bkprog, i.product\_code\_v42, i.return\_to\_locn, i.assignto, i.assigntype, i.qtyreserved, b.deprepon, case b.deprepon when 1 then b.deprepdatetime else i.retndate end as deprepdatetime, i.inrack from dbo.v1 as i with (noexpand) join dbo.tblbookings as b on b.booking\_no = i.booking\_no\_v32 join dbo.tblinvmas as m on i.product\_code\_v42 = m.product\_code; </code></pre><p>příklad dotazu a plán provedení:</p><pre><code>select vrsv.* from dbo.vwreallyslowview2 as vrsv where vrsv.product\_code\_v42 = 'm10bolt'; </code></pre><p><img src="https://i.stack.imgur.com/vg5cz.jpg" alt="new execution plan"></p><p>v novém plánu má hash shoda <em> žádný zbytkový predikát</em>, existuje <em> žádný složitý filtr</em>, <em> žádný zbytkový predikát</em> zapnuto hledat indexované zobrazení a <em> odhady kardinality</em> jsou přesně správné.</p><p>jako příklad toho, jak by byly ovlivněny plány vložení/aktualizace/odstranění, je to plán vložení do tabulky itemtrans:</p><p><img src="https://i.stack.imgur.com/kffk5.jpg" alt="insert plan"></p><p>zvýrazněná část je nová a vyžaduje se pro údržbu indexovaného pohledu. cívka tabulky nahradí vložené řádky základních tabulek pro údržbu indexovaného pohledu. každý řádek je spojen s tabulkou rezervací pomocí hledání seskupeného indexu, poté filtr použije složité predikáty klauzule <code>where</code>, aby se zjistilo, zda je třeba řádek přidat do pohledu. pokud ano, provede se vložení do seskupeného indexu pohledu.</p><p>stejný test <code>select * from view</code> provedený dříve byl dokončen za 150 ms s indexovaným pohledem na místě.</p><p>poslední věc: všiml jsem si, že váš server 2008 r2 je stále v rtm. neopraví to vaše problémy s výkonem, ale <a href="https://www.microsoft.com/en-us/download/details.aspx?id=30437">service pack 2 pro 2008 r2</a> je k dispozici od července 2012 a existuje mnoho dobrých důvodů, jak udržet co nejaktuálnější s aktualizacemi service pack.</p> <p>jedním z tichých zabijáků spojení mysql je paket mysql.</p><p>nejprve pojďme zjistit, co je mysql paket.</p><p>podle <a href="http://rads.stackoverflow.com/amzn/click/0596009577">strana 99 „porozumění interním mysql“ (isbn 0-596-00957-7)</a> jsou zde odstavce 1-3 vysvětlující mysql pakety:</p><blockquote> <p>mysql síťový komunikační kód byl napsán za předpokladu, že dotazy jsou vždy přiměřeně krátké, a proto je lze na server odesílat a zpracovávat v jednom bloku, který se v terminologii mysql nazývá <em> paket</em>. server přiděluje paměť dočasné vyrovnávací paměti pro uložení paketu a vyžaduje dost, aby se vešel úplně. tato architektura vyžaduje preventivní opatření, aby se zabránilo vyčerpání paměti serveru  omezení velikosti paketu, čehož tato možnost dosáhne.</p> <p>kód zájmu týkající se této možnosti je uveden v <strong> sql/net\_serv.cc </strong>. podívejte se na <strong> my\_net\_read () </strong>, poté následujte volání na <strong> my\_real\_read () </strong> a věnujte zvláštní pozornost <strong> net\_realloc () </strong>.</p> <p>tato proměnná také omezuje délku výsledku mnoha řetězcových funkcí. podrobnosti viz <strong> sql/field.cc </strong> a <strong> sql/intem\_strfunc.cc </strong>.</p> </blockquote><p>znalost této informace o paketech mysql umožňuje vývojářům/dba jejich velikost tak, aby pojala více blob uvnitř jednoho paketu, i když jsou nepříjemně velké. v takovém případě paket příliš malý způsobí problémy s otevřeným spojením.</p><p>podle <a href="http://dev.mysql.com/doc/refman/5.5/en/gone-away.html"><strong> dokumentace mysql </strong></a> </p><ul> <li> <p>tyto chyby můžete také získat, pokud odešlete dotaz na server, který je nesprávný nebo příliš velký. pokud mysqld obdrží paket, který je příliš velký nebo mimo provoz, předpokládá se, že se klientovi něco pokazilo a připojení se uzavře. pokud potřebujete velké dotazy (například pokud pracujete s velkými sloupci blob), můžete zvýšit limit dotazu nastavením proměnné max\_allowed\_packet serveru, která má výchozí hodnotu 1 mb. možná bude také nutné zvýšit maximální velikost paketu na konci klienta. další informace o nastavení velikosti paketu jsou uvedeny v <a href="http://dev.mysql.com/doc/refman/5.5/en/packet-too-large.html">oddíl c.5.2.10, „paket příliš velký“.</a> </p> </li> <li> <p>příkaz insert nebo replace, který vkládá mnoho řádků, může také způsobit tyto druhy chyb. jeden z těchto příkazů odešle serveru jeden požadavek bez ohledu na počet řádků, které mají být vloženy; proto se často můžete této chybě vyhnout snížením počtu řádků odeslaných na vložit nebo vyměnit.</p> </li> </ul><p><strong> doporučení [~ # ~] [~ # ~] </strong></p><p>zkuste zvýšit <a href="http://dev.mysql.com/doc/refman/5.5/en/server-system-variables.html#sysvar\_max\_allowed\_packet"><strong> max\_allowed\_packet </strong></a> na mnohem větší číslo, protože výchozí hodnota je 1m. navrhoval bych asi 10krát největší pole text nebo blob, které máte ve svém aktuálním datovém souboru.</p><p>chcete-li nastavit max\_allowed\_packet na 256m, můžete jej přidat do /etc/my.cnf nebo my.ini</p><pre><code>[mysqld] max\_allowed\_packet=256m </code></pre><p>na pokrytí budoucích restartů mysqld. chcete-li nainstalovat hodnotu nyní na server, spusťte toto:</p><pre><code>set global max\_allowed\_packet = 1024 * 1024 * 256; </code></pre><p>pokusit se !!!</p> Príčin může být spousta a zrejme to nebude mit souvislost z Duolingem. Zkuste se poptat nekde na forech, kde se resi hardwarove zalezitosti.