Nalezena vážná chyba v Microsoft SQL 7.0

Diskuze čtenářů k článku

Oškera Miroslav  |  20. 04. 2001 18:48  | 

Nepodařilo se nám dosáhnout stejného výsledku. Na jaké verzi NT a SQL byla chyba zjištěna.

Souhlasím  |  Nesouhlasím  |  Odpovědět
Tomáš Holčík  |  20. 04. 2001 18:48  | 

Nevím na čem autor, my jsme to testli na NT 4.0 Server, MS SQL Server 7.0, kontrolní test v SQL 6.5 a stejných NT byl OK.

Souhlasím  |  Nesouhlasím  |  Odpovědět
Jaromír ŽALUDEK  |  20. 04. 2001 18:48  | 

Chtěl bych upozornit autora článku, že celá chyba je právě v poznámce(cituji autora)
Poznámka : Index pk_model_id na stĺpec body_color_id v tabuľke automobile je unikátny, čo možno postráda zmysel, avšak pre účel demonštrácie chyby to nie je podstatné
neboť konstrukce clusterovaného unikátního indexu ve spojení One to Many na straně Many je pro optimalizátor dotazu nepřípustný.
Po vybudování celého případu dle zásad tvorby relačních spojení tabulek a vytvoření clusterovaného indexu na správném a hlavně možném místě tabulky pracuje celý příklad dobře a spolehlivě.
Myslím si, že by bylo korektní nespojovat chyby z návrhu databáze s interními chybami SQL7.0.
Pro doplnění uvádím, že nový optimalizátor pracuje zcela odlišně od původního 6.5.To má dvě roviny pohledu.
Na jedné straně došlo k velmi výraznému zrychlení, ale na druhé straně mnoho dotazů, které snadno prošly v 6.5 je pro 7.0 nepřípustných. Bohužel zcela ve znamení Microsoftu se tyto odchylky nikde nepublikují a nastává fáze nového vývoje pro již hotové aplikace.


Souhlasím  |  Nesouhlasím  |  Odpovědět
ztjt  |  20. 04. 2001 18:48  | 

řčtč

Souhlasím  |  Nesouhlasím  |  Odpovědět
Miroslav Oškera  |  20. 04. 2001 18:48  | 

Protože jsme před nedávnem naistalovali SQL 7 článek mne znervozněl a předal jsem ho programátorovi k posouzení. Tímto chci poděkovat Ing. Žižkovi za čas, který problému věnoval.
Problém je popsán v níže uvedeném příspěvku a je hlavně v návrhu databáze a konstrukci dotazu.
Dotaz ve tvaru:

SELECT automobile.model
FROM
color , automobile
WHERE
( color.color = 'black' ) and
( automobile.body_color_id = color.id ) and
( automobile.seat_color_id = automobile.body_color_id ) and
( automobile.doors = 4 )

chodí. Asi by chtělo volit méně bombastické titulky a více přemýšlet.

Souhlasím  |  Nesouhlasím  |  Odpovědět
Peter Polansky  |  20. 04. 2001 18:48  | 

Zda sa mi ze prispevky typu "Po vybudování celého prípadu dle zásad tvorby ... pracuje celý príklad dobre a spolehlive"
problem neriesia.

Pokusim sa preto este raz zopakovat, o co mi islo:
Prirodzene, ze nie je obtiazne prepisat priklad tak, aby vsetko fungovalo. Naopak, stravil som
takmer tyzden, kym sa mi veci podarilo zjednodusit tak, aby sa to dalo demonstrovat na jednoduchom priklade
( lebo zlozity by asi nikto necital ). Keby sa problemy neprejavovali len za urcitych specifickych podmienok,
ktore su velmi zriedkave, tak by si to niekto vsimol uz omnoho skor. Tieto specificke podmienky sa prirodzene
tazko zmysluplne demonstruju na priklade s dvoma tabulkami...

Preto vyslovne zdoraznujem ze cely priklad sluzi len na ukazku jednej veci:

ze v urcitych pripadoch pridanim indexu na tabulku sa nezmeni len rychlost vykonania,
ale aj vysledok select prikazu, co je podla mna nepripustne, ale mozno sa mylim.

To je jadro veci, o ktorom treba podla mna diskutovat.
Teda:

nie ci je moj priklad proti vsetkym zasadam spravneho navrhu, ale ci je prislusny select prikaz formalne spravny a ci napriek tomu
dava nespravne vysledky.

Souhlasím  |  Nesouhlasím  |  Odpovědět
Oto Burian  |  20. 04. 2001 18:48  | 

Pokud má být databázový server používán pro vážnou práci, musí fungovat korektně i v případech kdy není návrh databáze zcela optimální. V případě, že se něco optimalizátoru nelíbí, má to říci - není tedy normální, když pustí dotaz a vrátí chybnou odpověď.

Souhlasím  |  Nesouhlasím  |  Odpovědět
Jiří Burian  |  20. 04. 2001 18:48  | 

Rád bych reagoval na Vámi publikovanou zprávu obsahující sdělení o nalezení chyby v Microsoft SQL Serveru 7.0.

Poněkud nestandardní konstrukce, uvedená v příkladu s clusterovým indexem, poukazuje na chybu v optimalizátoru MS SQL Serveru. Firma Microsoft o této chybě ví, je publikována, vyřešena a klíčoví zákazníci jsou s ní seznámeni. Chyba se vyskytuje v prvních dodávaných verzí produktu 7.00.623. Oprava této chyby je již odstraněna v aktuálně dodávaných produktech a to od verze 7.00.689.

Oprava této chyby je součástí připravovaného MS SQL Server 7.0 Service Pack 1, který bude uživatelům, stejně jako jsou všechny podobné opravy, poskytován zcela zdarma. Service Pack s první aktualizací (na úrovni verze 7.00.689) je již v současné době veřejně přístupný. Pokud nemáte možnost získat tyto update v rámci některé z úrovní oficiální podpory od firmy Microsoft, pak lze soubory chráněné heslem “SP1BETA” získat na: ftp://ftp.microsoft.com/softlib/mslfiles/sql70sp1i.exe (Intel) ftp://ftp.microsoft.com/softlib/mslfiles/sql70sp1a.exe (Alpha).

Finální verze SP1, která bude obsahovat další aktualizace, bude dostupná v příštích týdnech.

Jiří Burian
MS SQL Server product manager
Microsoft ČR

Souhlasím  |  Nesouhlasím  |  Odpovědět
Jaromir Ocelka  |  20. 04. 2001 18:48  | 

Pred nedavnem se mi objevila chyba
pri pouzivani UNION v pohledu. Verze SQL serveru je SQL 6.5 SP5a.

V problemovem pohledu je UNION dvou selectu. Postupnym orezavanim jsem dostal pohled:

CREATE VIEW test AS
(select 2 AS a)
UNION
(select 1 AS a)

Tedy pouze konstanty

A chova se takto:
SELECT * FROM test
=================
a
-----------
1
2

(2 row(s) affected)
a
SELECT count(*) AS pocet FROM test
==============================
pocet
-----------
1

(1 row(s) affected)


Zna nekdo nejake reseni, je toto resitelna chyba nejakou zaplatou, nebo je to neprekonatelny problem a neni zatim nikde vyresen?

Jaromir Ocelka

PS: V SQL 7.0 se to chova dobre, ale kdyz zkusite vytvori pohled pomoci menu, tak vam SQL server vynada ze UNION not supported.

Souhlasím  |  Nesouhlasím  |  Odpovědět
Zasílat názory e-mailem: Zasílat názory Můj názor

Aktuální číslo časopisu Computer

Megatest 20 procesorů

Srovnání 15 True Wireless sluchátek

Vyplatí se tisknout fotografie doma?

Vybíráme nejlepší základní desky