Здравствуйте коллеги! Остро стоит вопрос по поводу переустановки ЕПО от электрона на флюорограф. Но при установке я столкнулся с проблемами которые не могу решить. Так же мне не понятен принцип установки программы и настройки, установить приложения получилось, но там требуется ещё как я понял некие модули подключения бд и много других настроек......по крайней мере так говорят с Электрона. У кого то есть информация про ЕПО? за ранее спасибо!
С флюшкой идут DVD c образами. Восстановись с них. Подкинь свою базу , скопируй папку с изображениями, старые сетевые настройки. Наверняка многое заработает. А дальше решать проблемы по мере их появления. А что такое серьёзное произошло с ЕПО , что дело дошло до переустановки?.
Какой программой запускаются образы? Файлы с расширением vhd.Какая последовательность? В наличии два диска.На коком только операционка? И если переустановить ОС база подцепится? Есть описание?
FAINT, на сколько помню, начинаешь грузиться с диска с виндой (тоже в комплекте), выбираешь восстановление с резервной копии, вставляешь диск с образом vhd и восстанавливаешь.
Понятно. Дошёл сам с помощью интернета....Проэксперементировал с дисками в комплекте аппарата. В результате получил сообщение: Идёт настройка....Так и не дождался результата. А база пустая, новая должна с образа "встать"?
Всем привет, кто-нибудь сталкивался с проблемой зависания ПО при загрузке: Запускаешь АРМ, вводишь пароль, появляется снизу бегущая полоса поиска и не останавливается. Сначала редко проявляется, затем все чаще и в последствии совсем не удается запустить АРМ, но если запустился, то работает нормально. Стоит версия ПО 1.0.0.0 сборка 19.
Российская Федерация
Мой город не дом и не улица...
ЦитатаDenisMS ()
зависания ПО при загрузке
Можно проверить базы на целостность и пр. Почистить файл лога транзакций баз. Если проведено много исследований, возможно нужно удалять старые исследования.
Какой тип БД? Firebird/Interbase, MS SQL Какой размер файла БД? Хотя если потом работает нормально, то больше похоже на проблемы с сетью, долго подключается, ищет сервер в сети
Дата: Воскресенье, 17.Янв.2016, 09:11 | Сообщение # 11
Участник
У вас сообщений: 146
электромеханик по R-оборудования
OFFлайн
Российская Федерация
Екатеринбург
База SQL Express. На целостность все проверял. Зависает на поиске не закончиных исследований (я так предпологаю). Единственное чего я смог добиться: это сделал бекапы с баз и затем восстоновить с пустыми. После этого начало работать, но косяки с зависанием все равно всплывают.
Дата: Четверг, 21.Янв.2016, 00:11 | Сообщение # 14
У вас сообщений: 1070
программист
OFFлайн
Российская Федерация
Москва
похоже, что электроновцы наступают на теже грабли со структурой базы, что и в дире/еос для крт. Надо смотреть базу, какие запросы шлёт софт, скорее всего нет индексов в таблицах в столбцах, по которым идёт поиск. Судя по размеру ldf-файлов, база в simple recovery mode и проблемы большого лога транзакций нет. Нужно исключить проблемы жёсткого диска и битой базы. Поставьте на комп SQL management studio
Дата: Четверг, 21.Янв.2016, 04:59 | Сообщение # 15
Участник
У вас сообщений: 146
электромеханик по R-оборудования
OFFлайн
Российская Федерация
Екатеринбург
ЦитатаFeT ()
А вот тут подробнее. Вы подкладывали пустые базы? Какие? И что, при этом также медленно идет загрузка?
Я восстонавливался с образа, что в комплекте с аппаратом, затем обновлялся до версии 19, в итоге имел чистые базы. Затем через maneger SQL, восстонавливал из бекапов сделанных ранее с баз. С пустой базой зависаний нет, если они и происходят то по др. причинам( лаборантка жаловолась, что после простоя более 30 мин. зависет, но это мелочи, там в настройках, счетчик надо убрать) и с восстоновленой базой, так же работает нормально, полоса поиска появляется , но все же через время убирается, правда мне пару раз приходилось наблюдать зависания на этом же месте, но хоть не постоянно.
Цитатаnaves ()
Судя по размеру ldf-файлов, база в simple recovery mode
базы находятся в нормальном состоянии
Цитатаnaves ()
Нужно исключить проблемы жёсткого диска и битой базы.
проверено не однократно
Цитатаnaves ()
Поставьте на комп SQL management studio
стоит
Единственное , что я еще не побывал(о чем здесь говорили) - это чистка(сжатие) лога ранзакций, аппарат находится далеко, так . что как там буду, попробую.
Дата: Четверг, 21.Янв.2016, 08:37 | Сообщение # 16
У вас сообщений: 1070
программист
OFFлайн
Российская Федерация
Москва
simple recovery mode Это нормальный режим работы базы, в котором лог транзакций не используется, поэтому он и не разрастается, когда файл данных mdf имеет размер гиг, а транзакций ldf 10 гигов http://www.askit.ru/custom/sql2005_admin/m4/04_05_recovery_model.htm Через студию проверьте базы Dbcc checkdb('Apr') Dbcc checkdb('Epo_hardware') Dbcc checkdb('wgd') Должна выйти простыня с текстом, но ошибок быть не должно, иначе делать ремонт
Код
ALTER DATABASE wgd SET SINGLE_USER WITH ROLLBACK IMMEDIATE; GO Dbcc checkdb('wgd', REPAIR_ALLOW_DATA_LOSS) Go ALTER DATABASE Wgd SET MULTI_USER;
для нужной базы. Хотя если вы восстанавливали базу из бэкапа через студию, то ошибок быть не должно.
Чтобы запустить приложение Приложение SQL Server Profiler, в меню Пуск последовательно выберите пункты Все программы, Microsoft SQL Server 2008, Средства обеспечения производительности, затем выберите пункт SQL Server Profiler.
Но эта утилита может быть не установлена в системе.
Сообщение отредактировал naves - Четверг, 21.Янв.2016, 08:52
Этого пока не смог сделать , т.к. не установлен SQL Server Profiler, а там инета почти нет. Придется потом ехать отдельно, пока еще на всякий сделал Шринк лога транзакций , может показалось, но стало быстрей искать. Посмотрим спустя несколько дней.
Дата: Пятница, 22.Янв.2016, 14:02 | Сообщение # 19
У вас сообщений: 1070
программист
OFFлайн
Российская Федерация
Москва
а вы не можете развернуть базу и софт на другом компе или виртуалке? Profiler покажет только какой запрос виснет, потом надо будет вносить изменения в SQL-базу, еще раз ехать придется.
Дата: Суббота, 23.Янв.2016, 17:46 | Сообщение # 21
У вас сообщений: 1070
программист
OFFлайн
Российская Федерация
Москва
Забыл сказать про один из вариантов тормозов базы. В базах надо периодически делать перестроение индексов в таблицах Можно либо ручками сделать rebuild index в таблицах где много записей. В дереве базы открываете таблицы, в них индексы и по ним уже правой кнопкой. Либо прогнать скриптом по всем таблицам https://www.mssqltips.com/sqlserv....tabases Для объективности надо записать trace из profiler до и после перестройки индексов
Дата: Суббота, 23.Янв.2016, 17:59 | Сообщение # 22
Участник
У вас сообщений: 146
электромеханик по R-оборудования
OFFлайн
Российская Федерация
Екатеринбург
Спасибо. Обязательно попробую. Самое , что бесит, то что эти неисправность у нас как под копирку, каждый второй так себя ведет. А Электрон не охотно на контакт идет . Может у кого есть другой билд ПО , выше 19, поделитесь пожалуйста.
Дата: Понедельник, 25.Янв.2016, 13:29 | Сообщение # 23
Участник
У вас сообщений: 146
электромеханик по R-оборудования
OFFлайн
Российская Федерация
Екатеринбург
naves, Привет, запарился с этой системой, с начало не мог интегрировать образ в VMWARE, ну ни как не хотела работать. Запустил через VBOX, причем образ подготовленный для VMWARE. Скачал прогу ExpressProfiler, т.к. в SQL Express нет Profiler и отдельно его не нашел. В итоге прога запускается и не зависает(СКОТИНА), пробывал раз 10, пока остался только один старый косяк - зависает на выходе из ПО: нажимаешь выход, подтверждаешь и ждешь, должно появится сообщение с запросом об удалении старых снимков, а его нет, спустя несколько минут появляется сообщение об ошибке приложения и поиске решения в инете. Вот в файле запись журнала слежения активности SQL.
Дата: Понедельник, 25.Янв.2016, 14:19 | Сообщение # 24
У вас сообщений: 1070
программист
OFFлайн
Российская Федерация
Москва
жесть какая-то exec sp_DeletePacsStudies выполняется 20 секунд а потом делается запрос всех снимков вообще без фильтров, те программа выкачивает из базы всю инфу о всех снимках, которых у вас 59 тысяч, и занимает это 84 секунды.
Код
SELECT [Extent1].[Id] AS [Id], [Extent1].[OpticalParameterId] AS [OpticalParameterId], [Extent1].[SeriesId] AS [SeriesId], [Extent1].[PhysicianId] AS [PhysicianId], [Extent1].[ContrastId] AS [ContrastId], [Extent1].[DicomUid] AS [DicomUid], [Extent1].[Uid] AS [Uid], [Extent1].[SopClassUid] AS [SopClassUid], [Extent1].[FileName] AS [FileName], [Extent1].[FocalDistance] AS [FocalDistance], [Extent1].[EntranceDose] AS [EntranceDose], [Extent1].[Dose] AS [Dose], [Extent1].[ExternalFilm] AS [ExternalFilm], [Extent1].[ImagePreview] AS [ImagePreview], [Extent1].[FileSize] AS [FileSize], [Extent1].[DateCreation] AS [DateCreation], [Extent1].[Status] AS [Status], [Extent1].[DoseIndicator] AS [DoseIndicator], [Extent1].[DoseIndicatorDeviation] AS [DoseIndicatorDeviation], [Extent1].[DoseIndicatorResult] AS [DoseIndicatorResult], [Extent1].[ImageType] AS [ImageType], [Extent1].[MultiframeTypeId] AS [MultiframeTypeId], CAST( [Extent1].[FrameRate] AS tinyint) AS [C1], [Extent1].[CurveTypeId] AS [CurveTypeId], [Extent1].[HightQuality] AS [HightQuality], [Extent1].[IsFilm] AS [IsFilm], [Extent1].[Kv] AS [Kv], [Extent1].[Ma] AS [Ma], [Extent1].[Ms] AS [Ms], [Extent1].[Mas] AS [Mas], [Extent1].[PostProccesTlsPath] AS [PostProccesTlsPath], [Extent1].[MaskFrameNumber] AS [MaskFrameNumber], [Extent1].[IsSubtractionEnabled] AS [IsSubtractionEnabled], [Extent1].[XSubtractionShift] AS [XSubtractionShift], [Extent1].[YSubtractionShift] AS [YSubtractionShift], [Extent1].[Landmark] AS [Landmark], [Extent1].[Comment] AS [Comment], [Extent1].[TomoLayerHeight] AS [TomoLayerHeight], [Extent1].[FluoroKv] AS [FluoroKv], [Extent1].[FluoroMa] AS [FluoroMa], [Extent1].[TubeHeat] AS [TubeHeat], [Extent1].[ReopField] AS [ReopField], [Extent2].[Id] AS [Id1], [Extent2].[XOffset] AS [XOffset], [Extent2].[YOffset] AS [YOffset], [Extent2].[Scale] AS [Scale], [Extent2].[CircleShutterId] AS [CircleShutterId], [Extent2].[RectangleShutterId] AS [RectangleShutterId], [Extent2].[Window] AS [Window], [Extent2].[Level] AS [Level], [Extent2].[Gamma] AS [Gamma], [Extent2].[LLateralityIsVisible] AS [LLateralityIsVisible], [Extent2].[RLateralityIsVisible] AS [RLateralityIsVisible], [Extent2].[LLateralityX] AS [LLateralityX], [Extent2].[LLateralityY] AS [LLateralityY], [Extent2].[RLateralityX] AS [RLateralityX], [Extent2].[RLateralityY] AS [RLateralityY], [Extent2].[LateralityAngle] AS [LateralityAngle], [Extent2].[LLateralityTranslatedX] AS [LLateralityTranslatedX], [Extent2].[LLateralityTranslatedY] AS [LLateralityTranslatedY], [Extent2].[RLateralityTranslatedX] AS [RLateralityTranslatedX], [Extent2].[RLateralityTranslatedY] AS [RLateralityTranslatedY], [Extent2].[ShutterAngle] AS [ShutterAngle], [Extent2].[Rotate] AS [Rotate], [Extent2].[Flip] AS [Flip], [Extent2].[IsInverse] AS [IsInverse], [Extent2].[Substraction] AS [Substraction], [Extent2].[MaskFrameNumber] AS [MaskFrameNumber1], [Extent2].[HorizontalPixelShift] AS [HorizontalPixelShift], [Extent2].[VerticalPixelShift] AS [VerticalPixelShift], [Extent2].[Landmark] AS [Landmark1], [Extent2].[OverlayData] AS [OverlayData], [Extent4].[Id] AS [Id2], [Extent4].[X] AS [X], [Extent4].[Y] AS [Y], [Extent4].[Radius] AS [Radius], [Extent4].[Color] AS [Color], [Extent4].[XTranslated] AS [XTranslated], [Extent4].[YTranslated] AS [YTranslated], [Extent5].[Id] AS [Id3], [Extent5].[X] AS [X1], [Extent5].[Y] AS [Y1], [Extent5].[Width] AS [Width], [Extent5].[Height] AS [Height], [Extent5].[Color] AS [Color1], [Extent5].[XTranslated] AS [XTranslated1], [Extent5].[YTranslated] AS [YTranslated1], [Extent5].[WidthTranslated] AS [WidthTranslated], [Extent5].[HeightTranslated] AS [HeightTranslated] FROM [dbo].[Image] AS [Extent1] INNER JOIN [dbo].[ImageOpticalParameters] AS [Extent2] ON [Extent1].[OpticalParameterId] = [Extent2].[Id] LEFT OUTER JOIN [dbo].[ImageOpticalParameters] AS [Extent3] ON [Extent1].[OpticalParameterId] = [Extent3].[Id] LEFT OUTER JOIN [dbo].[CircleShutter] AS [Extent4] ON [Extent3].[CircleShutterId] = [Extent4].[Id] LEFT OUTER JOIN [dbo].[RectangleShutter] AS [Extent5] ON [Extent3].[RectangleShutterId] = [Extent5].[Id]
откройте базу, в дереве выберите Programmability> stored procedures, найдите sp_DeletePacsStudies, правой кнопкой по ней, modify получившийся код сюда под спойлер
SELECT Patient.ID AS 'Patient_ID' , RTRIM(LTRIM(Patient.DICOMPatientID)) AS 'Patient_DICOMPatientID',RTRIM(LTRIM(Patient.Name)) AS 'Patient_name' , RTRIM(LTRIM(Patient.Surname)) AS 'Patient_surname', RTRIM(LTRIM(Patient.Surname2)) AS 'Patient_surname2' , RTRIM(LTRIM(PatientDetailed.Address)) AS 'Patient_Detailed_address' , RTRIM(LTRIM(Patient.Patronymic)) AS 'Patient_patronymic' , Patient.Sex AS 'Patient_sex',Patient.BirthDateDay AS 'Patient_birthDateDay',Patient.BirthDateMonth AS 'Patient_birthDateMonth',Patient.BirthDateYear AS 'Patient_birthDateYear',Patient.IsSaved AS 'Patient_IsSaved' ,Patient.DataSource AS 'Source' ,RTRIM(LTRIM(Patient.DicomUid)) AS 'PatientDicomUid' ,RTRIM(LTRIM(Patient.AuxPat1)) AS 'Patient_auxPat1', RTRIM(LTRIM(Patient.AuxPat2)) AS 'Patient_auxPat2' , RTRIM(LTRIM(PatientDetailed.HistoryNumber)) AS 'Patient_Detailed_HistoryNumber', PatientDetailed.AgeGroupID AS 'AgeGroup_ID' ,PatientDetailed.ResidenceID AS 'Residence_ID', PatientDetailed.DepartmentID AS 'Department_ID',PatientDetailed.TotalDose AS 'Patient_Detailed_TotalDose',PatientDetailed.CountryId AS 'Country_ID',PatientDetailed.RegionId AS 'Region_ID',PatientDetailed.FactoryId AS 'Factory_ID',PatientDetailed.OccupationID AS 'Occupation_ID', PatientDetailed.InsCompanyID AS 'InsCompany_ID' , PatientDetailed.ContingentID AS 'Contingent_ID' ,RTRIM(LTRIM(PatientDetailed.PhoneNumbers)) AS 'Patient_Detailed_phoneNumbers' , RTRIM(LTRIM(PatientDetailed.PassportIssuer)) AS 'Patient_Detailed_passportIssuer', PatientDetailed.PassportDate AS 'Patient_Detailed_PassportDate' ,RTRIM(LTRIM(PatientDetailed.Passport)) AS 'Patient_Detailed_passport', PatientDetailed.Constitution AS 'PatientConstitution', RTRIM(LTRIM(PatientDetailed.ZIPCode)) AS 'Patient_Detailed_ZIPCode' , RTRIM(LTRIM(PatientDetailed.Policy)) AS 'Patient_Detailed_policy' , RTRIM(LTRIM(PatientDetailed.Comments)) AS 'Patient_Detailed_comments' , RTRIM(LTRIM(PatientDetailed.AuxEdit1)) AS 'Patient_Detailed_auxEdit1 ', Study.Diagnosis AS 'Study_diagnosis', Study.TotalDose AS 'Study_totalDose',Study.TotalDoseGr AS 'Study_totalDoseGr' ,Study.RefInstitutionId AS 'Hospital_ID', Study.ImageCount AS 'Study_Image_count' , Study.RefPhysicianID AS 'Medical_staff_ID' , Study.IsSaved AS 'Study_IsSaved', Study.LastStudyUpdateDate AS 'LastStudyUpdateDate' , Study.[OperatorsName] AS 'Study_OperatorsName' , RTRIM(LTRIM(Study.AccessionNumber)) AS 'StudyAccessionNumber', Study.ProcedureDescription AS 'Study_procedureDescription' ,Study.StudyStatus AS 'StudyStatus', Study.FactStartDate AS 'Study_factStartDate', Study.PlanStartDate AS 'Study_planStartDate' , RTRIM(LTRIM(Study.MppsUid)) AS 'MppsUidStudy', Study.IsNeedSetMppsStatus AS 'IsNeedSetMppsStatusStudy', Study.MppsDesiredStatus AS 'MppsDesiredStatusStudy', Study.MppsDicomServiceId AS 'MppsDicomServiceId', Study.ContrastId AS 'ContrastId' , RTRIM(LTRIM(Contrast.CodeMeaning)) AS 'ContrastCodeMeaning' ,RTRIM(LTRIM(Contrast.CodeMeaningLoc)) AS 'ContrastCodeMeaningLocalize' ,RTRIM(LTRIM(Contrast.CodeValue)) AS 'ContrastCodeValue' ,RTRIM(LTRIM(Contrast.Name)) AS 'ContrastName' ,RTRIM(LTRIM(Hospital.Name)) AS 'Hospital_Name',MedicalStaff.PositionID AS 'Medical_position_ID' ,RTRIM(LTRIM(MedicalPosition.Name)) AS 'Medical_position_name', MedicalPosition.Hidden AS 'MedicalPositionHidden_Column' , RTRIM(LTRIM(MedicalStaff.Name)) AS 'Medical_staff_userName' ,MedicalStaff.UserInfo AS 'Medical_staff_userInfo',Study.FactStartTime AS 'Study_factStartTime', Study.PlanStartTime AS 'Study_planStartTime', RTRIM(LTRIM(Study.DicomId)) AS 'StudyDicomId' ,RTRIM(LTRIM(Study.DicomUid)) AS 'Study_DICOM_UID' , RTRIM(LTRIM(Study.Name)) AS 'Study_name', Study.Status AS 'Study_status',Study.ProtocolID AS 'Study_protocolID', Study.ID AS 'Study_study_ID', RTRIM(LTRIM(Study.Aux1)) AS 'StudyAux1' ,RTRIM(LTRIM(Study.Aux2)) AS 'StudyAux2',Study.AuxEditId AS 'AuxRefBookId' ,RTRIM(LTRIM(StudyAuxRefBook.Name)) AS 'AuxRefBookName' ,RTRIM(LTRIM(StudyAuxRefBook.Value)) AS 'AuxRefBookValue' ,RTRIM(LTRIM(Factory.Name)) AS 'FactoryName' , RTRIM(LTRIM(Contingent.Name)) AS 'Contingent_name' ,RTRIM(LTRIM(Department.Name)) AS 'Department_Name' , RTRIM(LTRIM(Occupation.Name)) AS 'Occupation_name' ,RTRIM(LTRIM(InsCompany.Name)) AS 'InsCompany_name' , RTRIM(LTRIM(Residence.Name)) AS 'Residence_Name' ,RTRIM(LTRIM(Region.Name)) AS 'Region_Name' ,RTRIM(LTRIM(AgeGroup.Name)) AS 'AgeGroup_name' , RTRIM(LTRIM(Country.Name)) AS 'Country_name',AgeGroup.Min AS 'AgeGroupMin' , AgeGroup.Max AS 'AgeGroupMax',AgeGroupID AS 'AgeGroup_ID',ResidenceID AS 'Residence_ID' ,Residence.PhoneCode AS 'Residence_phonecode' ,DepartmentID AS 'Department_ID',OccupationID AS 'Occupation_ID' ,InsCompanyID AS 'InsCompany_ID',ContingentID AS 'Contingent_ID' , CategoryID AS 'Patient_Category_ID' , ISNULL(DisabledStudies.Id, 0) AS 'StudyIsDisabled' ,RTRIM(LTRIM(RTRIM(LTRIM(PatientCategory.Name)))) AS 'Patient_Category_Name' , RTRIM(LTRIM(PatientDetailed.HistoryNumber)) AS 'Patient_Detailed_HistoryNumber' FROM Patient INNER JOIN PatientDetailed ON Patient.DetailedId = PatientDetailed.Id INNER JOIN Study ON Patient.ID = Study.PatientID LEFT JOIN AgeGroup ON PatientDetailed.AgeGroupID = AgeGroup.ID LEFT JOIN Residence ON PatientDetailed.ResidenceID = Residence.ID LEFT JOIN Region ON PatientDetailed.RegionId = Region.ID LEFT JOIN Hospital ON Study.RefInstitutionId = Hospital.ID LEFT JOIN MedicalStaff ON Study.RefPhysicianID = MedicalStaff.ID LEFT JOIN MedicalPosition ON MedicalStaff.PositionID = MedicalPosition.ID LEFT JOIN Occupation ON PatientDetailed.OccupationID = Occupation.ID LEFT JOIN Department ON PatientDetailed.DepartmentID = Department.ID LEFT JOIN InsCompany ON PatientDetailed.InsCompanyID = InsCompany.ID LEFT JOIN Contingent ON PatientDetailed.ContingentID = Contingent.ID LEFT JOIN Contrast ON Study.ContrastID = Contrast.ID LEFT JOIN PatientCategory ON PatientDetailed.CategoryID = PatientCategory.ID LEFT JOIN StudyAuxRefBook ON Study.AuxEditId = StudyAuxRefBook.Id LEFT JOIN Factory ON PatientDetailed.FactoryId = Factory.ID LEFT JOIN Country ON PatientDetailed.CountryId = Country.ID LEFT JOIN DisabledStudies on DisabledStudies.StudyId = Study.Id WHERE (Study.StudyStatus=0 OR Study.StudyStatus=1 OR Study.StudyStatus=2 OR Study.StudyStatus=5 OR Study.StudyStatus=3 OR Study.StudyStatus=8 OR Study.Id in (SELECT DisabledStudies.StudyId FROM DisabledStudies) ) ORDER BY 'Patient_surname' ASC
особенно красиво ,RTRIM(LTRIM(RTRIM(LTRIM(PatientCategory.Name))))
Сообщение отредактировал naves - Понедельник, 25.Янв.2016, 18:11
Дата: Вторник, 26.Янв.2016, 08:01 | Сообщение # 26
Участник
У вас сообщений: 146
электромеханик по R-оборудования
OFFлайн
Российская Федерация
Екатеринбург
Цитатаnaves ()
откройте базу, в дереве выберите Programmability> stored procedures, найдите sp_DeletePacsStudies, правой кнопкой по ней, modify получившийся код сюда под спойлер
Сделал:
USE [WGD] GO /****** Object: StoredProcedure [dbo].[sp_DeletePacsStudies] Script Date: 01/26/2016 10:54:33 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO
ALTER PROCEDURE [dbo].[sp_DeletePacsStudies] AS BEGIN SET NOCOUNT ON;
BEGIN TRAN
-- тип источника - PACS DECLARE @patientPacsSource INT SELECT @patientPacsSource = 2
DELETE FROM BackupFilePath WHERE Id IN (SELECT bfp.id FROM BackupFilePath bfp INNER JOIN image i ON i.Id = bfp.ImageId INNER JOIN Series s ON s.Id = i.SeriesId INNER JOIN Study st ON st.Id = s.StudyId INNER JOIN Patient p ON p.Id = st.PatientId WHERE p.DataSource = @patientPacsSource)
-- удаление изображений DELETE FROM PacsMovedImages WHERE ImageId IN (SELECT i.id FROM image i INNER JOIN Series s ON s.Id = i.SeriesId INNER JOIN Study st ON st.Id = s.StudyId INNER JOIN Patient p ON p.Id = st.PatientId WHERE p.DataSource = @patientPacsSource)
-- удаление изображений DELETE FROM image WHERE Id IN (SELECT i.id FROM image i INNER JOIN Series s ON s.Id = i.SeriesId INNER JOIN Study st ON st.Id = s.StudyId INNER JOIN Patient p ON p.Id = st.PatientId WHERE p.DataSource = @patientPacsSource)
-- удаление серий DELETE FROM Series WHERE Id IN (SELECT s.Id FROM Series s INNER JOIN Study st ON st.Id = s.StudyId INNER JOIN Patient p ON p.Id = st.PatientId WHERE p.DataSource = @patientPacsSource)
DELETE FROM StudyApr WHERE Id IN (SELECT sa.Id FROM StudyApr sa INNER JOIN Study st ON st.Id = sa.StudyId INNER JOIN Patient p ON p.Id = st.PatientId WHERE p.DataSource = @patientPacsSource)
-- удаление исследований DELETE FROM Study WHERE Id IN (SELECT st.Id FROM Study st INNER JOIN Patient p ON p.Id = st.PatientId WHERE p.DataSource = @patientPacsSource)
-- удаление пациентов DELETE FROM Patient WHERE Id IN (SELECT p.Id FROM Patient p WHERE p.DataSource = @patientPacsSource)
IF @@ERROR <> 0 ROLLBACK TRAN ELSE COMMIT TRAN END
Дата: Вторник, 26.Янв.2016, 08:39 | Сообщение # 27
У вас сообщений: 1070
программист
OFFлайн
Российская Федерация
Москва
Индексы перестраивали, есть разница?
Электрон решил наступить на теже грабли, что и в дире. Можно исправить процедуру удалений с пакса, но эти 20 секунд на фоне остального трэша ничего не дадут. Если вы допускаете мысль, о том что можно использовать "модифицированную не производителем" программу в медицинском оборудовании, то мне нужна ваша виртуальная машина с базой, или доступ к ней.
Дата: Вторник, 26.Янв.2016, 09:48 | Сообщение # 28
Участник
У вас сообщений: 146
электромеханик по R-оборудования
OFFлайн
Российская Федерация
Екатеринбург
Цитатаnaves ()
Индексы перестраивали, есть разница?
Индексы перестраивал в ручную, на 4 таблицах не удалось сделать(смотри снимки), Ды давал ссылку на скрипт для перестраивания всех индексов, ты его сможешь заточить под эти базы? Виртуальный диск смогу выложить только дома на НАС и дам тебе доступ в личку, там около 40 гиг.
Дата: Вторник, 26.Янв.2016, 10:32 | Сообщение # 29
У вас сообщений: 1070
программист
OFFлайн
Российская Федерация
Москва
отжигаешь :) это стандартный скрипт, он универсален для любых баз, он просто обрабатывает все таблицы в базах а вручную имело смысл только для заполненных больших таблиц, типа снимков, пациентов, исследований
Дата: Пятница, 29.Янв.2016, 20:10 | Сообщение # 30
Участник
У вас сообщений: 173
ПО рентгеновских аппаратов
OFFлайн
Российская Федерация
Мой город не дом и не улица...
ЦитатаDenisMS ()
делается запрос всех снимков вообще без фильтров, те программа выкачивает из базы всю инфу о всех снимках, которых у вас 59 тысяч
Как я понимаю, это делается для того чтобы удалить уже устаревшие файлы. В настройках есть такой параметр - хранить N дней. Зачем при это тащить всю инфу (когда можно дату, статус и путь к файлу) - не знаю. Судя по тексту sp_DeletePacsStudies удаляет затащенных с PACSа пациентов и записи о бэкапных файлах (я вообще не понимаю что это). А такие тормоза на 59 тыс. это странно. Видел базу где более 300 тыс. и та же версия - таких проблем нет. Правда меняли HDD. Диск с базой начал сыпаться через пару лет. После замены уже три года живет.
Дата: Суббота, 30.Янв.2016, 05:06 | Сообщение # 31
У вас сообщений: 1070
программист
OFFлайн
Российская Федерация
Москва
ЦитатаFeT ()
Зачем при это тащить всю инфу (когда можно дату, статус и путь к файлу) - не знаю.
потому что программисты электрона (хотя наверное внешний разработчик) воспользовались новым молодежным движком .NET 4.0, в котором вместо фильтрации данных на уровне SQL навязывается использование LINQ и прочей ереси. Всем же теперь пофигу, что программа при работе жрет гиг памяти, и столько же по сети гоняет. при нажатии выход возникает ошибка
Код
AppDomain Unhandled exception. Message: Ошибка при выполнении функции , InnerException: System.OutOfMemoryException: Exception of type 'System.OutOfMemoryException' was thrown.<CR><LF> at System.Data.SqlClient.TdsParserStateObject.ReadPlpBytes(Byte[]& buff, Int32 offst, Int32 len)<CR><LF> at System.Data.SqlClient.TdsParser.ReadSqlValue(SqlBuffer value, SqlMetaDataPriv md, Int32 length, TdsParserStateObject stateObj)<CR><LF> at System.Data.SqlClient.SqlDataReader.ReadColumnData()<CR><LF> at System.Data.SqlClient.SqlDataReader.ReadColumn(Int32 i, Boolean setTimeout)<CR><LF> at System.Data.SqlClient.SqlDataReader.GetValueInternal(Int32 i)<CR><LF> at System.Data.SqlClient.SqlDataReader.GetValue(Int32 i)<CR><LF> at lambda_method(Closure , Shaper )<CR><LF> at System.Data.Common.Internal.Materialization.Shaper.HandleEntityAppendOnly[TEntity](Func`2 constructEntityDelegate, EntityKey entityKey, EntitySet entitySet)<CR><LF> at lambda_method(Closure , Shaper )<CR><LF> at System.Data.Common.Internal.Materialization.Coordinator`1.ReadNextElement(Shaper shaper)<CR><LF> at System.Data.Common.Internal.Materialization.Shaper`1.SimpleEnumerator.MoveNext()<CR><LF> at System.Linq.Enumerable.WhereEnumerableIterator`1.MoveNext()<CR><LF> at System.Collections.Generic.List`1..ctor(IEnumerable`1 collection)<CR><LF> at System.Linq.Enumerable.ToList[TSource](IEnumerable`1 source)<CR><LF> at DataModule.WgdEntityService.GetImages(Func`2 func, IEnumerable`1 returnPaths), StackTrace: at DataModule.WgdEntityService.GetImages(Func`2 func, IEnumerable`1 returnPaths)<CR><LF> at EPO.ViewModel.MainFormViewModelBase.QuitCommandLogic()<CR><LF> at EPO.ViewModel.MainFormViewModelBase.<get_Quit>b__7(Object p)<CR><LF> at EPO.RelayCommand.Execute(Object parameter)<CR><LF> at MS.Internal.Commands.CommandHelpers.CriticalExecuteCommandSource(ICommandSource commandSource, Boolean userInitiated)<CR><LF> at System.Windows.Controls.Primitives.ButtonBase.OnClick()<CR><LF> at System.Windows.Controls.Button.OnClick()<CR><LF> at
нехватка памяти блин, конечно же на виртуалке с гигом оперативы не хватило никому. далее: EPO.ViewModel.MainFormViewModelBase.QuitCommandLogic() http://pastebin.com/qGvkRqsj DataModule.WgdEntityService.GetImages(Func`2 func, IEnumerable`1 returnPaths) http://pastebin.com/E7SGA1pv если статус снимка не равен трем, то снимок в список не добавляется далее сравнивается дата снимка с текущей датой+количество дней архива
но блин, дата снимка всегда будет меньше текущей даты, здесь должен быть минус, но всем пофиг сначала все снимки закачиваются программой, а потом фильтруются, причем неправильно, аааа нет убейте меня......
хотя стоп, тогда же все снимки должны были раньше удаляться, или лаборант всегда нажимал не удалять, и поэтому их число выросло до 50 тыс
вот, кстати в версии от марта 2013 года все нормально сделано, хотя дата тоже прибавляется, наверное минус раньше делается, но не суть. а в версии от ноября вот такая криворучка. вот кто вам обновил версию, тот и сломал все.
сама по себе база тоже не настроена, нужных индексов половины нет, вот этот скрипт выполните, хоть обычные запросы будут быстрее работать
Код
USE [WGD] GO CREATE NONCLUSTERED INDEX [idxImageId] ON [dbo].[BackupFilePath] ( [ImageId] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
GO
CREATE NONCLUSTERED INDEX [idxStatus] ON [dbo].[Image] ( [Status] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
GO CREATE NONCLUSTERED INDEX [idxSeriesId] ON [dbo].[Image] ( [SeriesId] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
GO CREATE NONCLUSTERED INDEX [idxStudyId] ON [dbo].[Series] ( [StudyId] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
GO CREATE NONCLUSTERED INDEX [idxPlanStartDate] ON [dbo].[Study] ( [PlanStartDate] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
GO CREATE NONCLUSTERED INDEX [idxStudyStatus] ON [dbo].[Study] ( [StudyStatus] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
GO CREATE NONCLUSTERED INDEX [idxPatientId] ON [dbo].[Study] ( [PatientId] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
GO CREATE NONCLUSTERED INDEX [idxDataSource] ON [dbo].[Patient] ( [DataSource] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
GO CREATE NONCLUSTERED INDEX [idxSurname] ON [dbo].[Patient] ( [Surname] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
Сообщение отредактировал naves - Суббота, 30.Янв.2016, 05:47
Дата: Суббота, 30.Янв.2016, 06:30 | Сообщение # 32
Участник
У вас сообщений: 146
электромеханик по R-оборудования
OFFлайн
Российская Федерация
Екатеринбург
Цитатаnaves ()
вот кто вам обновил версию, тот и сломал все.
Обновляли сами электроновци, приезжали во время гарантии, причем эта версия ПО практически везде стоит( может только ревизии разные). У меня обновлялка тоже только эта версия, хочется другую попробовать, а нету.
Цитатаnaves ()
программисты электрона (хотя наверное внешний разработчик)
Насколько я знаю, как раз для этого ПО и набрали новый штат программистов молодых( ЭОС им видимо надоел).
naves, Так , что в итоге, можно будет поправить ситуацию?
Дата: Суббота, 30.Янв.2016, 12:01 | Сообщение # 34
У вас сообщений: 1070
программист
OFFлайн
Российская Федерация
Москва
а в других базах такой же глюк с выходом? просто там где нет этого глюка, там по любому другая версия сборки. можно функционал удаления старых снимков просто вырезать к чертям, он все равно не работает.
Дата: Суббота, 30.Янв.2016, 15:43 | Сообщение # 35
Участник
У вас сообщений: 146
электромеханик по R-оборудования
OFFлайн
Российская Федерация
Екатеринбург
naves, Давай попробуем как оно будет работать. Почему в базе которую я восстоновил с пустой такого косяка с выключением нет. Может попробовать физически убрать все снимки с диска D?
Дата: Суббота, 30.Янв.2016, 20:01 | Сообщение # 36
Участник
У вас сообщений: 173
ПО рентгеновских аппаратов
OFFлайн
Российская Федерация
Мой город не дом и не улица...
Цитатаnaves ()
но блин, дата снимка всегда будет меньше текущей даты, здесь должен быть минус,
Так в настройках программы и стоит количество дней хранения снимков с минусом!
ЦитатаDenisMS ()
Почему в базе которую я восстоновил с пустой такого косяка с выключением нет
Так там похоже данных нет.
ЦитатаDenisMS ()
Может попробовать физически убрать все снимки с диска D?
Это тут не причем. Проблема именно в БД. А файлы лежат себе на диске. Если он переполняется, то имеет смысл написать bat файл для их периодического удаления. Там еще один косяк есть. Автоматически удаляются только файлы с расширением els, а еще бывают файлы с расширением elso, так те, только ручками и удаляются.
Цитатаnaves ()
вот этот скрипт выполните, хоть обычные запросы будут быстрее работать
А вот за этот скрипт - спасибо!
Сообщение отредактировал FeT - Суббота, 30.Янв.2016, 20:57
Дата: Суббота, 30.Янв.2016, 21:02 | Сообщение # 37
Участник
У вас сообщений: 173
ПО рентгеновских аппаратов
OFFлайн
Российская Федерация
Мой город не дом и не улица...
Цитатаnaves ()
хотя стоп, тогда же все снимки должны были раньше удаляться, или лаборант всегда нажимал не удалять, и поэтому их число выросло до 50 тыс
Снимки удаляются только физически с диска. Все данные хранятся в базе постоянно для возможности добавления исследований существующим пациентам. При этом в таблице со снимками хранится маленькая картинка из-за которой размер таблицы растет. Понимаю так, что надо регулярно чистить базу ручками от старых записей, тогда тормозов будет меньше.
Дата: Понедельник, 01.Фев.2016, 02:25 | Сообщение # 39
У вас сообщений: 1070
программист
OFFлайн
Российская Федерация
Москва
ЦитатаFeT ()
Снимки удаляются только физически с диска.
очень похоже на это, судя по коду
ЦитатаDenisMS ()
Почему в базе которую я восстоновил с пустой такого косяка с выключением нет
ЦитатаDenisMS ()
Когда я басстонавливал базу из файла *.bac восстонавливается не вся информация? Только так я понимаю , почему она перестает тормозить при выключении.
вы путаетесь в показаниях. при восстановлении с пустой базы, конечно не будет тормозов, тк таблица снимков в БД пустая.
ЦитатаFeT ()
Все данные хранятся в базе постоянно для возможности добавления исследований существующим пациентам.
для этого было бы достаточно оставить записи в таблицах пациентов и исследований, а записи из таблиц с картинками удалять, но...электрону виднее
ЦитатаFeT ()
Так в настройках программы и стоит количество дней хранения снимков с минусом!
верх нелогичности в интерфейсе для количества дней использовать отрицательное значение количество дней -2, ага воробьев на ветке тоже -2 :) и вот в другом месте, складывается дата уже с минусом
Понимаю так, что надо регулярно чистить базу ручками от старых записей, тогда тормозов будет меньше.
если бы программа изначально была бы написана нормально (хотя в предыдущей версии именно и было нормально) то и было бы все нормально. MSSQL отлично работает и с миллионами записей, если в таблице есть индексы, и поиск делается по индексным столбцам
В целом EPO написана довольно технологично, и явно не студентом, как и старая дира для КРТ Но вот эти косяки при работе с базой