rychlý způsob ověření dvou tabulek proti sobě
<p>děláme etl proces. když je vše řečeno a hotovo, existuje spousta tabulek, které by měly být totožné. jaký je nejrychlejší způsob, jak ověřit, že tyto tabulky (na dvou různých serverech) jsou ve skutečnosti identické. mluvím jak o schématu, tak o datech.</p><p>mohu udělat hash na stole je to samé, jako bych byl schopen na jednotlivý soubor nebo skupinu souborů - porovnat jeden s druhým. srovnáváme data red-gate, ale protože dotyčné tabulky obsahují miliony řádků, každý by chtěl něco trochu výkonnějšího.</p><p>jedním z přístupů, který mě zaujme, je <a href="http://weblogs.sqlteam.com/jeffs/archive/2004/11/10/2737.aspx">toto kreativní využití prohlášení odborů</a> . ale rád bych prozkoumal hašovací myšlenku o něco dále, pokud je to možné.</p><p><strong> aktualizace poštovní odpovědi </strong></p><p>pro všechny budoucí vistory ... tady je přesný přístup, který jsem nakonec použil. fungovalo to tak dobře, že to děláme na každé tabulce v každé databázi. díky níže uvedeným odpovědím, že mě směřujete správným směrem.</p><pre><code>create procedure [dbo].[usp\_databasevalidation] @tablename varchar(50) as begin set nocount on; -- parameter = if no table name was passed do them all, otherwise just check the one -- create a temp table that lists all tables in target database create table #chksumtargettables ([fullname] varchar(250), [name] varchar(50), chksum int); insert into #chksumtargettables ([fullname], [name], [chksum]) select distinct '[mydatabase].[' + s.name + '].[' + t.name + ']' as [fullname], t.name as [name], 0 as [chksum] from mydatabase.sys.tables t inner join mydatabase.sys.schemas s on t.schema\_id = s.schema\_id where t.name like isnull(@tablename,'%'); -- create a temp table that lists all tables in source database create table #chksumsourcetables ([fullname] varchar(250), [name] varchar(50), chksum int) insert into #chksumsourcetables ([fullname], [name], [chksum]) select distinct '[mylinkedserver].[mydatabase].[' + s.name + '].[' + t.name + ']' as [fullname], t.name as [name], 0 as [chksum] from [mylinkedserver].[mydatabase].sys.tables t inner join [mylinkedserver].[mydatabase].sys.schemas s on t.schema\_id = s.schema\_id where t.name like isnull(@tablename,'%');; -- build a dynamic sql statement to populate temp tables with the checksums of each table declare @targetstmt varchar(max) select @targetstmt = coalesce(@targetstmt + ';', '') + 'update #chksumtargettables set [chksum] = (select checksum\_agg(binary\_checksum(*)) from ' + t.fullname + ') where [name] = ''' + t.name + '''' from #chksumtargettables t select @targetstmt declare @sourcestmt varchar(max) select @sourcestmt = coalesce(@sourcestmt + ';', '') + 'update #chksumsourcetables set [chksum] = (select checksum\_agg(binary\_checksum(*)) from ' + s.fullname + ') where [name] = ''' + s.name + '''' from #chksumsourcetables s -- execute dynamic statements - populate temp tables with checksums exec (@targetstmt); exec (@sourcestmt); --compare the two databases to find any checksums that are different select tt.fullname as [tables whose checksum does not match] from #chksumtargettables tt left join #chksumsourcetables st on tt.name = st.name where isnull(st.chksum,0) &lt;&gt; isnull(tt.chksum,0) --drop the temp tables from the tempdb drop table #chksumtargettables; drop table #chksumsourcetables; end </code></pre>
<p>tady je to, co jsem udělal předtím:</p><pre><code>(select 'tablea', * from tablea except select 'tablea', * from tableb) union all (select 'tableb', * from tableb except select 'tableb', * from tablea) </code></pre><p>funguje to dost dobře na stolech, které mají asi 1 000 000 řádků, ale nejsem si jistý, jak dobře by to fungovalo na extrémně velkých stolech.</p><p><strong>přidáno:</strong></p><p>spustil jsem dotaz proti svému systému, který porovnává dvě tabulky s 21 poli běžných typů ve dvou různých databázích připojených ke stejnému serveru se systémem sql server 2005. tabulka obsahuje asi 3 miliony řádků a liší se přibližně 25 000 řádků. primární klíč v tabulce je však zvláštní, protože se jedná o složený klíč z 10 polí (je to kontrolní tabulka).</p><p>plány provádění dotazů mají celkové náklady 184,255879 pro <code>union</code> a 184,228383 pro <code>union all</code>. cena stromu se liší pouze v posledním kroku před vrácením řádků, zřetězením.</p><p>skutečné provedení jednoho dotazu trvá asi 42 s plus asi 3 s, než se řádky skutečně přenesou. čas mezi dvěma dotazy je stejný.</p><p><strong>druhý dodatek:</strong></p><p>toto je ve skutečnosti <em> extrémně </em> rychlé, každý z nich běží proti 3 milionům řádků přibližně za 2,5 s:</p><pre><code>select checksum\_agg(binary\_checksum(*)) from tablea select checksum\_agg(binary\_checksum(*)) from tableb </code></pre><p>pokud se výsledky těchto neshodují, víte, že tabulky jsou odlišné. pokud se však výsledky <em> shodují </em>, nemáte <em> </em> zaručeno, že tabulky jsou totožné kvůli [velmi nepravděpodobné] možnosti kolize kontrolního součtu.</p><p>nejsem si jistý, jak změny datového typu mezi tabulkami ovlivní tento výpočet. spustil bych dotaz proti zobrazením <code>system</code> nebo <code>information\_schema</code> zobrazení.</p><p>zkoušel jsem dotaz proti jiné tabulce s 5 miliony řádků a ten běžel asi za 5 s, takže se zdá být převážně o (n).</p>
Udělej si dvě tabulky. V jedné budeš mít kompletní info a ve druhé jen požadovaný výstup. Pokud budeš mít vše ve stejném formátu a seřazené, je to už snadné. <p>pravděpodobně se dostáváte do radostí mysql myisam engine ...</p><p>v rámci mysql (nebo phpmyadmin) použijte příkazy repair table xyz znovu, opakovaně, na každé z vašich tabulek (nebo spíše tabulek souvisejících s vašimi podmínkami, protože to jsou ty, které znějí zkaženě), aby se zjistilo, zda to nic nevyřeší.</p><p>pokud selžou, existuje několik zdokumentovaných řešení:</p><p> <a href="http://www.google.com/search?q=recover+a+corrupt+mysql+database">http://www.google.com/search?q=recover+a+corrupt+mysql+database</a> </p><p>jakmile jsou věci obnoveny, spusťte příkazy optimalizovat tabulku xyz na každé tabulce a poté změňte motor databáze a každou tabulku, aby byla použita innodb. innodb poněkud neuspořádá katalog (zejména pokud upustíte databázi nebo velké tabulky), ale - pokud je kompatibilní s acid - je to o dost méně náchylné k chybám než myisam.</p> Takže jste se ptali, jak zvládnout práci na násobku „úkolů“ najednou, ne? S výjimkou větvení.


Můžete mít více checkouts ze zdroje na lokálním počítači, suffixing název adresáře s názvem lístku, na kterém pracujete. Jen se ujistěte, aby se změny ve správném adresáři, v závislosti na úkolu ...


Směšování více úkolů v jedné pracovní kopii / commit může být velmi matoucí, zvláště pokud někdo potřebuje, aby svou práci zkontrolovat později. Často toto je provedeno pomocí [„Data Driven odběry“](https://msdn.microsoft.com/en-us/library/ms169673.aspx) , ale tato funkce je k dispozici pouze v některých SQL vydáních: Enterprise a Business Intelligence, ale ne v normě.


Takže existuje celá řada kreativních řešení. Ale nemám rád žádné z nich, a všechny vyžadují spravedlivý trochu práce mimo SSRS.


Mezi řešení, které jsem viděl, patří: Vytvoření odběr a potom zakázání nebo povolení SQL úlohu, kterou odešle předplatné (identifikovatelné podle GUID).


Vytvořte si .NET obálky exe zvládnout odeslání e-mailu. Je možné spustit dotaz nejprve zjistit, kolik se vrací řádky, a pak v případě potřeby generovat zprávu a zahrnout do e-mailu. Použij jinou, vhodnější aplikaci. Její vhodnost ověříš snadno. Soubor rozbal a hned zase zabal (bez jakékoli úpravy). Musí být shodná nejen velikost , ale i hash! Já bych generování XML, když se něco změní, spíše než na požadavku společnosti Google. To znamená, že aktualizuje pouze tak rychle, jak to potřebuje.


Já bych to uložit centrálně. Máte-li CDN, prásk ho tam a přesměrovat na něj. Dalo by se argumentovat, je to noční můra, ale je to ještě horší, než když všechny své frontendy generující vlastní verzi souboru Sitemap? Odpověď: Ne, je to mnohem efektivnější.


Pokud nechcete mít CDN bych zkoumat způsob přesměrování žádosti z jednoho uzlu do druhého. Ty by mohly být dokonce schopen řídit se svým zátěže Vyrovnávání takže určité řetězce user-agent jít přímo do uzlu sitemap generující.







Co se týče otázky 2 ... tvrzení Google budou automaticky kontrolovat s vámi, jakmile budou vědět, jak rychle se vaše aktualizace webu. Já bych aktualizovat ručně několika prvních a pak Google by měl vědět, jakou rychlostí se dál na.


Ale pokud nejste odesílání 20 ping za hodinu, pochybuji, že budu vadit příliš mnoho. Není to, jako by to změní váš výkon SERP. Stačí si jen ověřit proti XML schémata, jak je popsáno zde


<http://www.sitemaps.org/protocol.php#validating> Zřejmě cheš laborovat. Samozřejmě, že to jde. Ale já ti doporučuji raději uklízenou kopii a pomocí GHST, PM nebo ADDS libovolně střídat za cenu času pro kopírování (u mně tak cca 4 minuty) [https://www.cpubenchmark.net/cpu.php](https://www.cpubenchmark.net/cpu.php?cpu=Intel+Celeron+N3060+%40+1.60GHz) a najdi si to same ohledne stolniho, aspon ohledne vykonu ti to napovi.Na tomhle provozovat win musi bit tragedie od zacatku a je otazka v jakem stavu ty win vubec jsou.Pokud to nenabiji ani vyple, pripane v biosu, tak mne napada jen jedna vec zrusit rychle spusteni win, protoze jinak je to pouze da se rici hybernovane, neni to vypnute. Treba to pomuze.Jinak asi reklamace a poznas. Jedna vec je kapacita baterie, ale tobe asi chcipla, takze by to meli resit oni. Taky muze bit v haji nabijeci cast v notesu, adepter neni nabijecka, je to jen a jen zdroj.Mit to jeste vyndavaci bat, tak ji vytahnu adapter a baterku a treba 20x mackam spousteci tlacitko. Treba u lenov to takto funguje, u jinejch zase srzet 10 vterin. V principu jde o vybiti casti desky.[https://h30434.www3.hp.com/t5/Notebook-Software-and-...](https://h30434.www3.hp.com/t5/Notebook-Software-and-How-To-Questions/HP-Stream-14-Laptop-Battery-plugged-in-not-charging/td-p/6078116)  asi podobne stroj, pomohl mu novejsi bioss tim ze posledni je z prosince 2017 Moment .. startuju kristalovou kouli...Chkdsk x: /r /f na vsech SDD / HDD.trimvyfoukat prach z vetraku i ve zdrojikontrola teplot - tim to neni ale kdyz uz jsi v tom.Kontrola eventlogu.kontrola SMARTkontrola powermanagmentu - uspavani disku.Presunout SWAP na SSD.osobne sazim na to uspavani HDD ale neznam presne rozlozeni sil :Dpokud nepomuze napis, projedeme sfc a DISM :)Neni zac. Pa