MrLei 0 Zgłoś post Napisano Styczeń 29, 2015 Mam problem z bazą mysql'a gdy tworze nową tabele z selecta innych 3 tabel. Czas genrowanie tej tabeli jest dla mnie do zaakceptowania. Problem dotyczy blokowanie całej bazy w tym czasie, 1,5 minuty cała baza "zwisa" , stoi i czeka aż sie ten proces zakończy. Tabele mam myisam. Czy to poblem tabel myisam? przy innodB było by tak samo? Udostępnij ten post Link to postu Udostępnij na innych stronach
xorg 693 Zgłoś post Napisano Styczeń 29, 2015 Poczytaj o blokowaniu tabel w mysql to rozwiaze twoje watpliwosci Udostępnij ten post Link to postu Udostępnij na innych stronach
MrLei 0 Zgłoś post Napisano Styczeń 29, 2015 pocztałem zmieniłem na innodb .. i to samo. Udostępnij ten post Link to postu Udostępnij na innych stronach
xorg 693 Zgłoś post Napisano Styczeń 29, 2015 (edytowany) pocztałem zmieniłem na innodb .. i to samo. http://www.percona.com/blog/2006/07/12/insert-into-select-performance-with-innodb-tables/ PS. A może brakuje Ci np. indeksów albo zapytanie może być lepiej zbudowane i dlatego zapytanie tak długo trwa? Edytowano Styczeń 29, 2015 przez xorg (zobacz historię edycji) Udostępnij ten post Link to postu Udostępnij na innych stronach
MrLei 0 Zgłoś post Napisano Styczeń 29, 2015 Problem nie jest długości zapytania tylko to że jeden select który tworzy tabele blokuje cała baze. Udostępnij ten post Link to postu Udostępnij na innych stronach
ptrkchn 0 Zgłoś post Napisano Luty 1, 2015 Nie laduj danych na zasadzie insert info select from. Takie zapytania zawsze blokują tabelę. Jeżeli koniecznie musisz ładować dane w ten sposób, zastanów się nad stworzeniem widoku lub pomogę znaleźć ci inne rozwiązanie Udostępnij ten post Link to postu Udostępnij na innych stronach
ptrkchn 0 Zgłoś post Napisano Luty 2, 2015 Zresztą 1.5 minuty to i tak długo.jakie dokładnie zapytania tworzysz? Ile danych jest przerzucane? Udostępnij ten post Link to postu Udostępnij na innych stronach
Pan Kot 1535 Zgłoś post Napisano Luty 2, 2015 Jest kilka możliwości. Możliwością samego SQLa jest tworzenie widoków. Możliwością MySQLa jest użycie np. mysqldump'a, który robiąc kopię całej bazy (pliku), czy nawet pojedynczych tabel, działa o wiele szybciej niż robienie tego samego SQLem. Za to najlepiej wyjdziesz jak zlokalizujesz bottlenecka. Najczęściej jest to I/O, w tym celu o wiele lepiej puścić mysqldumpa przez pipe'a do gzipa (mysqldump -h localhost ... | gzip > mojabza.sql.gz), bo oszczędzasz bardzo dużo danych, które musisz zapisać na dysk. W przypadku CPU, pomóc może założenie lepszych indeksów, dotweakowanie zmiennych serwera MySQL, i wiele innych rzeczy. Udostępnij ten post Link to postu Udostępnij na innych stronach
ptrkchn 0 Zgłoś post Napisano Luty 2, 2015 Dokładnie tak jak mówi Archi. Sprawdź też strukturę bazy - jeżeli potrzebujesz danych składowych z trzech innych tabel może się okazać, że logika którą podjales jest bez sensu. Być może w ogóle nie potrzebujesz czwartej tabeli. Udostępnij ten post Link to postu Udostępnij na innych stronach
Misiek08 285 Zgłoś post Napisano Luty 2, 2015 Patrzę na Wasze wiadomości i zastanawiam się czemu tutaj poziom tak bardzo leży. Porobiłem sobie testy na koncie hostingowym i zrobiłem bazę, zapytanie optymalne, ale dużo danych. Baza zanim przemieliła z kilku tabel to po prostu chwilę pomyślała. Czy nie możecie zrozumieć, że autor ma: - dobrą strukturę - dobre zapytanie - szybki serwer ? Autor nie pyta o to jak zoptymalizować bazę, tylko o techniczne ograniczenia takiego zapytania. Moja odpowiedź, żeby nie było offtop'a: Topornym rozwiązaniem (jeżeli masz dużo danych w sensie ilości, a nie rozmiaru, to polecam skopiować używane tabele do nowej bazy, tam wykonać zapytanie i przerzucić dane do głównej bazy LUB postawić slave'a i na nim wykonać operację pobierając wynik jakimś językiem i wrzucając od razu do bazy macierzystej. Może też rozważ inny system bazodanowy, który będzie albo szybszy albo będzie miał możliwość wykonywania takich operacji bez blokad. Może map-reduce, czy coś. Udostępnij ten post Link to postu Udostępnij na innych stronach
ptrkchn 0 Zgłoś post Napisano Luty 2, 2015 Patrzę na Wasze wiadomości i zastanawiam się czemu tutaj poziom tak bardzo leży. Porobiłem sobie testy na koncie hostingowym i zrobiłem bazę, zapytanie optymalne, ale dużo danych. Baza zanim przemieliła z kilku tabel to po prostu chwilę pomyślała. Czy nie możecie zrozumieć, że autor ma: - dobrą strukturę - dobre zapytanie - szybki serwer ? Autor nie pyta o to jak zoptymalizować bazę, tylko o techniczne ograniczenia takiego zapytania. Moja odpowiedź, żeby nie było offtop'a: Topornym rozwiązaniem (jeżeli masz dużo danych w sensie ilości, a nie rozmiaru, to polecam skopiować używane tabele do nowej bazy, tam wykonać zapytanie i przerzucić dane do głównej bazy LUB postawić slave'a i na nim wykonać operację pobierając wynik jakimś językiem i wrzucając od razu do bazy macierzystej. Może też rozważ inny system bazodanowy, który będzie albo szybszy albo będzie miał możliwość wykonywania takich operacji bez blokad. Może map-reduce, czy coś. O rany, no niby tak, al. My chcemy od MrLei informacji, które pomogą nam dobrać odpowiednie warianty żeby "wyleczyć" jego problem i nie musiał wracać z tym na forum co tydzień. Myślę, że temat powinien iść w tę stronę: MrLei, czy przerzucenie tych tabel jest jednorazowe, czy okresowe? Udostępnij ten post Link to postu Udostępnij na innych stronach
MrLei 0 Zgłoś post Napisano Luty 22, 2015 Dziękuje za pomoc, każda pomoc nawet off topic może okazać się pomocna :-) Tabel którą robię to jest tabela " normalizacyjna" czyli taka która właśnie składam z kliku table do jednej która ma chodzić jako "frontend" do szybkiego działania głównych zapytań oraz do zmniejszenia liczby rekordów i aby pozbyć się joinów. Tabela tworzona jest cyklicznie co godzinę. Tabela po tworzeniu ma zakładane indexy tam gdzie są wymagane od zapytań głównych na "frontendzie" Niestety strukture bazy i logikę nie za bardzo chce zmieniać bo to jest aplikacja klienta robiona przez kogoś innego a przebudowa tak "głeboko" aplikacji jest nie opłacalna. Udostępnij ten post Link to postu Udostępnij na innych stronach
MrLei 0 Zgłoś post Napisano Luty 22, 2015 (edytowany) Dodam jeszcze że przerobiłem sprawę widoku w mysql ale efekt jest gorszy od obecnego rozwiązania z select + create... Co do tabeli, która tworze to blokowanie tej tabeli nie jest problem gdyż do tego mam ustawione działanie tabel na przemiennie czyli jeśli jest tworzona tabela nowa "a" to frontend dział obecnie na tabeli "b" i odwrotnie. Będę testował scenariusz taki że zbuduje slave tylko z tabel potrzebnych do budowy tabli nowej. Na slave będe robił nowa tabel i potem ją wsadzał do mastera. Edytowano Luty 22, 2015 przez MrLei (zobacz historię edycji) Udostępnij ten post Link to postu Udostępnij na innych stronach
Misiek08 285 Zgłoś post Napisano Luty 22, 2015 Toporne, ale slave może stać zablokowany, a wrzucasz nową tabelę na master i aplikacja może jej używać. Możesz powiedzieć co to są za dane konkretniej? Udostępnij ten post Link to postu Udostępnij na innych stronach
MrLei 0 Zgłoś post Napisano Luty 23, 2015 Toporne to fakt... ale slave chcę zrobię tylko do budowania tabeli "normalizacyjne" po to aby to ona była właśnie tylko obciążana. Typ danych tabel, ta największa ma 152 pola różnych typów varchar, int, mediumtext, enum , data, datetime, double, set. Udostępnij ten post Link to postu Udostępnij na innych stronach
Misiek08 285 Zgłoś post Napisano Luty 23, 2015 Sam to zaproponowałem, ale wiem, że można to tak zrobić stąd mój pomysł. Na pewno są jakieś sposoby na wykonanie takiego zapytania bez blokad i robienia slave, ale nikt ich tutaj nie chce przedstawić, a znanym nam sposobem powinno śmigać. Udostępnij ten post Link to postu Udostępnij na innych stronach
MrLei 0 Zgłoś post Napisano Luty 24, 2015 Sam to zaproponowałem, ale wiem, że można to tak zrobić stąd mój pomysł. Na pewno są jakieś sposoby na wykonanie takiego zapytania bez blokad i robienia slave, ale nikt ich tutaj nie chce przedstawić, a znanym nam sposobem powinno śmigać. Tak wiem i dziękuje bardzo :-) Też właśnie liczyłem że ten problem ma inne rozwiązanie. Udostępnij ten post Link to postu Udostępnij na innych stronach