Co mě brzdí po přilogování



Ahoj, zkusím popsat problém a napoprvé to asi nedám celéJak začít. Mám velký počítač, relativně nový, silný co do CPU, paměti, dva SSD disky v mirroru za integrovanym Intel řadičem na ASUS desce. Windows 7 64-bit.Konfiguraci Windows 7 64-bit mám cca identickou (tj. používám zrcadleně stejné aplikace průběžně na obou) na dvou dalších noteboocích. Já vím, že úplně identická principiálně být nemůže ale řekněme že snaha je udržovat všude všechno stejné. No a teď ten problém. Zapnu ten velký počítač, naběhne bleskurychle tak, že mám login dialog hned. No zadám hned heslo a šup - přihlašuje se uživatel nabíhá plocha. Skočí to do windows. No a hned jak otevírám disk, lezu po něm, vidím soubory, jdou mi otevírat. Hned mi bleskově naskočí IE, lezu po internetu, čili síť to vidí. Co mě ale deptá, že když nahodim Outlook 2013 anebo nějaké jiné aplikace typu no to jsem zapomněl... ![](/Client.Images/smileys/3.gif) ale jsou takové jen ten Outlook mě štve nejvíc protože na něj po startu furt čekám. Ten má prostě tak třeba řeknu 2-3 minuty kdy nedělá nic. Jen visí se splashem. Ne, není to addinama protože i když to spouštím s parametrem /safe, děje se to taky. Jenže situace je úplně jiná, když te poč zapnu a nechám ho v tom přihlašovacím dialogu ty tři minuty čekat. To znamená, vysvětluju si to tak, že nabíhají služby protože v tu dobu, než se přihlásim, nic jinýho nenabíhá. Pak když se přihlásim a hned skočim na Outlook, šup ho tam velebnosti a je bleskově nahoře. Jo, řeknete mi, to je nějaká servisa na kterou to čeká. Jenže na disk to nečeká, ten je přístupnej, na síť taky ne, ta jede. Na tom druhym laptopu (kterej je pomalá mrcha a má jen jeden SSD) tam to skočí jak namydlená liška hned po přilogování a tak mi řekněte, jak mám vystopovat která ta servisa je ta opožděná. Ještě je zajímavý že Outlook se vzpamatuje současně s tím, jak na mě bafne Intel chipset že ověřil, že disk je oka a zrcadlenej. Jo, on sice Outlook potřebuje velkej OST na disku ale ten disk jde číst hned po naběhnutí. Taky mám Comodo firewall ale zapnutou jen tu firewallovou část, všechny ty srágory co chytaji viry jsem disabloval hned od začátku. Prostě bych potřebovat nějaký vizualizátor bootu nebo nabíhání služeb. Pmatuje někdo bootvis taková utilitka pro xpčka. Snažil sjem se i vykoukat podle Windows System logu jaký události tam začnou po těch třech minutách skákat ale nic výraznýho vidět nebylo. Ta prodleva je tak výrazná a dlouhá že to vystopovat jít musí, ale potřebuju popostrčit jak. Přeinstalovávat nebudu ani za zlatý prase na to zapomeňte rovnou k tomu me nedonutí nic a nikdo ![](/Client.Images/smileys/3.gif). Ještě zkusím uvědomit jaký to byly další aplikace který se kousaly. Kously se třeba 3 a pak po těch třech minutách hup a naskočily všechny naráz. Pak ten komp šlape třeba týden jak namazaná liška, než ho restartuju. V servicech jsem se díval i na ty, který mají Automatic (Delayed) spuštění. Překlapal jsem je na Automatic. A stejně prd velebnosti.
Dobrej elaborát. Pokud např. nepoužiješ prostředky od Sysinternals (Procmon, Procexp a Autorun), nezjistíš stejně nic.Ale ty je stejně nepoužiješ.Tvoje naprosto zásadní chyba byla v tom, že sis po instalaci - nebo alespoň v době, kdy to bylo příznivé - nezařídil klon OS nebo že nepoužíváš ani bodů obnovy, protože to by tď stálo pár minut času.Takže mám proto tebe jedinou radu. Sežeň někoho, kdo tomu rozumí, který to dá do pořádku - prostředky opravy OS zásadně NEDOPORUČUJI - ale celkovou instalací, kterou posvětí tím, co je vzpomínal a naučí tě s tím pracovat.
<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>domnívám se, že je nutné omezit nebo najít, aby bylo možné získat opakované události, jinak je aplikace outlook nerozbalí. také musíte seřadit podle start<em> před </em>setting includerecurrences.</p> <p>rozhodně žijete ve smyslu falešné bezpečnosti! sociální inženýrství je dnes stále velmi rozšířené a pochybuji, že se to v průběhu desítek let změní, pokud vůbec.</p><p>zde je několik stručných vysvětlení, proč funguje sociální inženýrství. je těžké pokrýt vše, protože sociální inženýrství je opravdu široké pole.</p><p>některé důvody, proč funguje sociální inženýrství (z knihy citované dole):</p><ul> <li>většina lidí si přeje být zdvořilý, zejména k cizincům</li> <li>profesionálové chtějí vypadat dobře informovaní a inteligentní</li> <li>pokud jste chváleni, budete často mluvit více a prozradit více</li> <li>většina lidí by nelhala kvůli lhaní</li> <li>většina lidí laskavě reaguje na lidi, kteří se zdají být znepokojeni</li> </ul><p><strong> být užitečný </strong></p><p>lidé si obvykle chtějí navzájem pomáhat. rád děláme hezké věci!</p><ul> <li> <p>narazil jsem na recepci ve velké firemní kanceláři s papíry namočenými v kávě. mluvím s recepční a vysvětlím, že mám schůzku na pracovní pohovor za 5 minut, ale právě jsem rozlil kávu na všechny své papíry. pak se zeptám, jestli by recepční mohl být tak sladký, a vytisknout je znovu pro mě s touto usb pamětí, kterou mám.</p> <p>mohlo by to vést ke skutečné infekci pc recepční a mohlo by mi to získat oporu v síti.</p> </li> </ul><p><strong> používání strachu </strong></p><p>strach z neúspěchu nebo nedělání podle pokynů:</p><ul> <li> <p>facebooková stránka ředitele společnosti (john smith) (nebo jakýkoli jiný zdroj informací) ukazuje, že právě odjel na plavbu po dobu 3 týdnů. zavolám sekretářce a velícím hlasem říkám: „ahoj, volá chris. právě jsem opustil telefon s johnem smithem, má velmi dobrý čas na své plavbě se svou ženou carlou a dětmi. nicméně jsme v uprostřed integrace velmi důležitého obchodního systému, a řekl mi, abych vám zavolal, abyste nám mohli pomoci. nemohl volat sám sebe, protože jde o safari, ale to je opravdu naléhavé. vše, co musíte udělat, je vzít usb flash disk, který mu je zaslán v poště a zapojen, spusťte počítač a my jsme hotovi. projekt přežije!</p> <p>děkuji mnohokrát! byla jste skvělá pomoc! jsem si jistý, že vás john smith uzná za tento čin vstřícnosti. "</p> </li> </ul><p><strong> <a href="http://en.wikipedia.org/wiki/norm\_of\_reciprocity">hra na reciproci</a> </strong></p><ul> <li> <p>dveře zavazadlového prostoru. zadržuji pro vás vstupní dveře a rychle za tebou chodím. když otevřete další dveře, což je zabezpečené zabezpečení, zamířím stejným směrem a většina lidí se pokusí splácet užitečnou akci tím, že pro vás dveře opět podrží, čímž se dostanete na místo, kde byste neměli být. bojíte se, že vás chytí? ne. jen říkáš, že je ti líto a že jsi šel špatně.</p> <p>cíl by se téměř cítil povinen držet dveře za vás!</p> </li> </ul><p><strong> využití zvědavosti </strong></p><ul> <li> <p>zkuste hodit 10 usb flash disků na různá místa ve vaší organizaci. nemusíte je umisťovat na příliš zjevná místa. usb by mělo mít automaticky spuštěný domácí program telefonu, abyste viděli, kdy někdo připojí usb flash disk a měl by být teoreticky využit.</p> <p>další verzí tohoto je vyhodit usb flash disky s jediným dokumentem pdf, který se nazývá např. „john smith - norway.pdf“. dokument pdf obsahuje exploat adobe acrobat reader (existuje spousta a poté, co uživatel klikne na dokument, který bude vlastnit. samozřejmě jste se ujistili, že je zneužití přizpůsobeno konkrétní verzi adobe cílové organizace. bude pro většinu lidí přirozené otevřít dokument, aby mohli zkuste usb disk vrátit jeho vlastníkovi.</p> <ul> <li>dalším příkladem zvědavosti (možná jiný termín to vysvětluje lépe) jsou všechny tyto spam maily nebo špatné internetové reklamy, že jste něco vyhráli nebo nigerijský princ vám nabízí spoustu peněz, pokud mu můžete pomoci. jsem si jist, že jste s nimi již obeznámeni, ale jedná se také o útoky na sociální inženýrství a důvod, proč se nezastavili, je, že stále fungují!</li> </ul> </li> </ul><p>to je jen několik příkladů. samozřejmě existuje spousta tun!</p><p>můžeme se také podívat na historické události sociálního inženýrství:</p><p><strong> hbgary </strong></p><p>celý příběh si můžete přečíst <a href="http://arstechnica.com/tech-policy/news/2011/02/anonymous-speaks-the-inside-story-of-the-hbgary-hack.ars/">zde</a> (strana 3 obsahuje část sociálního inženýrství)</p><ul> <li> <p>v loňském roce byl hbgary hacknut. tento útok zahrnoval mnoho různých kroků, ale také aspekt sociálního inženýrství. hacker v krátkosti vyprávěl e-mailový účet společnosti vip) ve společnosti a poslal e-mail administrátorovi cílového systému, který řekl něco podobného: „ahoj johne, v současné době jsem v evropě a poskakuji mezi letišti. můžete mi otevřít ssh na vysoce číslovaném portu pocházejícím z jakékoli ip? potřebuji udělat nějakou práci. “když administrátor dostane tento e-mail, cítí, že je přirozené vyhovět tomuto, když e-mail pochází z důvěryhodného zdroje.</p> <p>ale to není ono! útočník měl heslo k účtu, ale přihlášení nefungovalo! takže pošle e-mailem zpět administrátorovi: „hej znovu, zdá se, že to nefunguje. heslo je stále správné? jaké bylo uživatelské jméno znovu?“. nyní také poskytl skutečné heslo pro systém (útočník to měl z dřívějšího kompromisu jiného systému ve stejném hacku), což útočníkovi poskytlo mnohem větší důvěru správce. správce samozřejmě souhlasí a sdělí útočníkovi své uživatelské jméno.</p> </li> </ul><p>seznam nahoře pochází z knihy " <a href="http://rads.stackoverflow.com/amzn/click/0470639539">sociální inženýrství: umění lidského hackování</a> " a mohu ho velmi doporučit!</p> <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>souhlasím s ostatními odpověďmi, přihlášení je pro konkrétní účel. musíte být velmi opatrní o tom, co a jak posíláte ... to může být velmi drahá chyba, pokud nebudete dodržovat všechny cann-spam regs.</p><p>chcete-li však odpovědět na svou e-mailovou otázku, existují hostovaná relé stmp, která si můžete zakoupit přístup například k socketlabs a smtp.com. dávám přednost těmto mailchimpům, pokud budu dělat něco proprietárního a opakovaného. měl jsem velký úspěch při opětovném prodeji e-mailového marketingu prostřednictvím e-mailového marketingu společnosti interspire v kombinaci se socketlabs nebo mým vlastním serverem co-lo'ed, který směroval.</p><p>throttling (což je to, co popisujete) je něco, co moje společnost používá, aby zajistila, že ti tři (aol, gmail, msn/hotmail) vás nepřipoutají jako nevyžádanou poštu hned za pálkou ... může to být 40% vašeho seznamu , věř tomu nebo ne. zdržel bych se toho, abych použil „trik“ hostitelů serveru, protože nakonec dohoní a výsledek obvykle není moc zábavný.</p> <p>to záleží na tom, zda máte obavy z odsouzení, nebo vyřizování pravděpodobné příčiny (v usa).</p><p>předpokládejme, že jste doma. spustíte vpn a připojíte se k poskytovateli vpn mimo lokalitu. pokud sleduji odchozí provoz (z vašeho domu), vím, že jste se právě připojili k určité ip adrese a že ip adresa je poskytovatel vpn. všechno uvnitř užitečného zatížení paketu je šifrováno.</p><p>poté se rozhodnete, když budete doma, zkontrolovat svůj e-mail. stává se, že sleduji odchozí provoz od poskytovatele vpn (který není šifrovaný). zaznamenávám to vše pomocí odfrknutí a spustím wireshark proti výstupu. vidím spojení s vaší e-mailovou adresou a napsaný e-mail. to může být chráněno ssl, pokud je to webmail. pokud se jedná o běžný e-mail, je to pravděpodobně prostý text. pokud to není prostý text, mohu se pokusit zachytit ho v přijímači. e-mail nemá žádný právní význam (tj. nepoužíváte jej k plánování něčeho nezákonného). všiml jsem si však skutečnosti, že zaměňujete použití jejich, tam a tam jsou. všimnu si také několika idiomů, které chcete použít.</p><p>během sledování odchozího provozu vidím, že váš účet psal několik e-mailů. zaznamenávám vzory překlepů a další postavy řeči. sbírám je po dobu jednoho měsíce nebo dvou.</p><p>potom jsem vložil položky, které si všimnu, do wireshark. přidávám několik věcí, o kterých je vám známo. pokaždé, když dojde k překlepu nebo použití idiomu (který používáte) najdete v obsahu jakéhokoli paketu, který vychází z vpn služby, kterou používáte, vidím to.</p><p>za další měsíc nebo dva mám spoustu datových bodů. některé jsou weby, na které jste šli, jiné ne. první věc, kterou udělám, je odstranění všech datových bodů, které opustily poskytovatele služeb vpn, když jste nebyli online (tj. neviděl jsem vás online z domova, nezapomeňte, že jsem začal sledováním tohoto připojení).</p><p>pak se podívám na zbývající provoz a uvidím, jestli mám nějaké body clusteru. spousta opakujících se témat. stejný předmět přes over. porovnávám to s vaším nešifrovaným provozem a vaším e-mailem.</p><p>neaplikoval jsem dostatek filtrů, abych tě izoloval od hluku (lidé, kteří používají stejné idiomy/pravopisné chyby jako ty), ale měl bych dobrý důvod pro pravděpodobnou příčinu. pokud mám dostatek referenčních bodů, je to jako otisk prstu.</p><p>v podstatě aplikuji bayesovskou analýzu na korpus práce, abych uvedl něco o pravděpodobnosti, že věřím, že příkladem bude člen souboru vytvořeného mým podezřelým. sbírka děl, která bych srovnávala, pochází z jakékoli práce, za kterou podezřelý veřejně uznal, že za ni odpovídá. tato analýza je dobře známa (a existuje i celá statistika stackexchange webu).</p><p>nechám tě odpovědět, s čím bych v tuto chvíli přišel?</p> protože používáte WinForms aplikaci, pokud je to v NET 2.0 je to vlastně systém uživatelských nastavení (tzv Properties), který je navržen pro tento účel. [Tento článek na webu MSDN](http://msdn.microsoft.com/en-us/library/aa730869(VS.80).aspx) má docela dobrý úvod do této


Pokud jste stále obavy o výkonu pak se podívat na [SQL Compact Edition](http://www.microsoft.com/sql/editions/compact/default.mspx) , který je podobný SQLite, ale je dar společnosti Microsoft, který jsem našel hraje velmi pěkně s WinForms a je tu i možnost [, aby to fungovalo s LINQ](http://geekswithblogs.net/steveclements/archive/2007/11/13/LINQ-to-SQL.compact.aspx) 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. <p><strong> aktualizace: </strong></p><blockquote> <p>našel jsem jeden konkrétní soubor mootools.js zabere hodně času načíst do ylsow, ale otevření souboru přímo - není žádné zpoždění.</p> </blockquote><p>to je nakonec docela dobrý tip - je mootools opravdu vyžadován? drupal používá jquery výhradně v jádru a většina přispěných modulů to dělá stejně, takže prosím vezměte na vědomí, že použití více než jednoho hlavního rámce javascriptu současně, pokud je to možné, většinou vývojáři většinou nedoporučují, obvykle - <a href="http://docs.jquery.com/using\_jquery\_with\_other\_libraries">vyžaduje specializované zpracování alespoň</a> a může zavést všechny divné (tj. obtížně laditelné) problémy bez ohledu na:<br> najdete <em> mnoho </em> souvisejících příspěvků v rámci <a href="https://stackoverflow.com/questions/tagged/jquery+mootools">jquery + mootools</a> o přetečení zásobníku, podívejte se na tuto příkladnou odpověď na <a href="https://stackoverflow.com/questions/491066/mootools-and-jquery-integration/491141#491141">mootools and jquery integration</a> zmínka o obrovské stránce konkrétně zpomaluje.</p><p>vzhledem k tomu, že <em> nepoužíváte mnoho modulů </em>, domnívám se, že pouze mootools požaduje pouze izolovaná oblast funkcionality, a proto navrhuji, abyste tuto možnost úplně vypnuli (tj. ujistěte se, že mootools.js je není načten) a zjistěte, zda to má nějaký význam.</p><hr><p>můžete si prohlédnout různé odpovědi na <a href="https://stackoverflow.com/questions/711705/tips-on-speeding-up-drupal-site">příslušná otázka na stack overflow</a> - zatímco se většinou překrývají s odpověďmi uvedenými zde mezitím, v komentářích se zde a tam objevují další rozhledy.</p><p>kromě toho bych rád znovu zdůraznil jednu důležitou věc, jak již zmínili disgruntledgoat a bpeterson76 do určité míry (každý +1):</p><p>přestože drupal není na prvním místě nejrychlejší cms, časy načítání stránky, které vidíte <strong>, nejsou vůbec normální </strong> ( i když je to možné na špatně nakonfigurovaných systémech/serverech) - proto byste měli <strong> nejprve analyzovat a identifikovat příčinu </strong>, než použijete optimalizace jakéhokoli druhu! určitě, některé doporučené optimalizace <em> mohou </em> pomoci i bez toho, ale zlatým pravidlem pro optimalizaci výkonu (a dalších) je pochopení problému spíše než pokus a chyba.</p><p>chcete-li začít, rád bych komentoval tři nastolená témata a poskytl ukazatel podrobnější dokumentace týkající se předmětu níže:</p><blockquote> <p>snažil jsem se přepnout vps, ale žádné zvýšení výkonu</p> </blockquote><ul> <li>dobře, přesto byste si měli výslovně zkontrolovat, zda používaný zásobník vps a lamp v první řadě funguje normálně (tj. bez drupalu)? <ul> <li>odpověď od bpeterson76 řeší možné příčiny.</li> </ul> </li> </ul><blockquote> <p>myslím, že hlavním viníkem je téma.</p> </blockquote><ul> <li>pak byste měli tento předpoklad ověřit, což lze snadno provést přepnutím na jiné téma, nejlépe na téma se známými výkonovými charakteristikami, např. výchozí téma garland.</li> </ul><blockquote> <p>nemyslím si, že je dotaz sql chybný.</p> </blockquote><ul> <li>už jste si uvědomili, že byste měli tento předpoklad ověřit také - k tomuto lze přistupovat různým způsobem, začínám s <a href="http://drupal.org/project/devel">devel modul</a> , který má různé nabídky týkající se <em> protokolování výkonu </em> včetně <em> doby provádění sql </em> (ostatní věci jsou samozřejmě také užitečné). <ul> <li>upozorňujeme, že pro přesnější časy provádění sql byste se měli uchýlit k vyhrazeným nástrojům pro používaný databázový systém.</li> </ul> </li> </ul><p>to vše a ještě mnohem více je řešeno prostřednictvím <a href="http://drupal.org/node/326504">drupal cache, rychlost a výkon</a> - tento zdrojový rozbočovač se na první pohled může zdát ohromující, ale jak jsem řekl <strong> porozumění problém je klíčem </strong> pro řešení problémů s výkonem - pro umožnění skokového startu nakonec nakonec doporučuji přečíst si <a href="http://drupal.org/node/2601">úvahy o ladění server</a> , zejména sekci <em> porozumění a konfigurace zásobníku pro výkon </em>.</p><p>hodně štěstí!</p> <p>můžete použít některou z těchto dvou jednoplášťových linek. oba přinášejí přesně stejný výkon na mém stroji a jsou přesnější než všechna dosud navrhovaná řešení (6. července 2014) v této otázce.</p><p><strong> pomocí <code>apt-mark</code>: </strong></p><pre><code>comm -23 &lt;(apt-mark showmanual | sort -u) &lt;(gzip -dc /var/log/installer/initial-status.gz | sed -n 's/^package: //p' | sort -u) </code></pre><p><strong> pomocí <code>aptitude</code>: </strong></p><pre><code>comm -23 &lt;(aptitude search '~i !~m' -f '%p' | sed "s/ *$//" | sort -u) &lt;(gzip -dc /var/log/installer/initial-status.gz | sed -n 's/^package: //p' | sort -u) </code></pre><p>jen velmi málo balíčků stále propadá trhlinami, ačkoliv mám podezření, že je uživatel skutečně nainstaloval <em> jsou</em>, a to buď hned po instalaci prostřednictvím nastavení lokalizace jazyka, nebo např. prostřednictvím instalátoru kodeků totem. také se zdá, že se hromadí i verze linuxových záhlaví, i když jsem nainstaloval pouze metapackage, který není specifický pro verzi. příklady:</p><pre><code>libreoffice-help-en-gb openoffice.org-hyphenation gstreamer0.10-fluendo-mp3 linux-headers-3.13.0-29 </code></pre><p><strong> jak to funguje: </strong></p><ol> <li>získejte seznam ručně nainstalovaných balíčků. pro aptitude další <code>sed</code> odstraní zbývající mezeru na konci řádku.</li> <li>seznam nainstalovaných balíčků získáte hned po nové instalaci.</li> <li>porovnejte soubory, vydejte pouze řádky v souboru 1, které nejsou v souboru 2.</li> </ol><p><strong> ostatní možnosti také nefungují: </strong></p><ul> <li>za použití <code>ubuntu-14.04-desktop-amd64.manifest</code> soubor ( <a href="http://releases.ubuntu.com/releases/trusty/ubuntu-14.04-desktop-amd64.manifest">zde</a> pro ubuntu 14.04) místo <code>/var/log/installer/initial-status.gz</code>. další balíčky jsou zobrazeny jako ručně nainstalované, i když nejsou.</li> <li>použitím <code>apt-mark showauto</code> namísto <code>/var/log/installer/initial-status.gz</code>. <code>apt-mark</code> například nezahrnuje balíček xserver-xorg, zatímco druhý soubor ano.</li> </ul><p>jako reference jsem použil různé další příspěvky stackexchange, žádné však nefungují a výše uvedené řešení:</p><ul> <li> <a href="https://unix.stackexchange.com/a/3624/49168">aptitude + manifest</a> </li> <li> <a href="https://unix.stackexchange.com/a/80520/49168">initial-status.gz + apt-mark showauto</a> </li> </ul><p>oba obsahují více balíčků než výše uvedené řešení.</p><p><strong> úprava: co dělat, pokud jste upgradovali z předchozí verze: </strong></p><p>pokud jste upgradovali ubuntu z jednoho vydání na další, budete pravděpodobně muset tento proces upravit. v takovém případě bych kromě souboru initial-status.gz z aktuální verze zkontroloval soubor manifestu novější verze (viz výše). můžete to snadno udělat pouhým přidáním dalšího srovnání. použití pouze souboru manifestu nebude fungovat, protože soubor manifestu bohužel neobsahuje vše, co soubor initial\_status.gz obsahuje (zaškrtl jsem).</p>